Есть в справке: Obtain And Set Summary Values.
» Использование DevExpress (часть 4)
afiget
пасиб...будем читать
сдается мне что я где то торможу но хз де..хрен его знает где искать сумму...в хелпе по этому поводу такое
Код:
AGroups := tvOrders.DataController.Groups;
with tvOrders.DataController.Summary do
begin
for I := 0 to GroupSummaryItems[0].Count - 1 do
begin
if TcxGridTableSummaryItem(GroupSummaryItems[0].Items[I]).Column = tvOrdersPurchaseDate then
AValue := GroupSummaryValues[AGroups.ChildDataGroupIndex[-1, 4], I];
end;
пасиб...будем читать
сдается мне что я где то торможу но хз де..хрен его знает где искать сумму...в хелпе по этому поводу такое
Код:
AGroups := tvOrders.DataController.Groups;
with tvOrders.DataController.Summary do
begin
for I := 0 to GroupSummaryItems[0].Count - 1 do
begin
if TcxGridTableSummaryItem(GroupSummaryItems[0].Items[I]).Column = tvOrdersPurchaseDate then
AValue := GroupSummaryValues[AGroups.ChildDataGroupIndex[-1, 4], I];
end;
Когда был вопрос о том, как перекинуть данные из cxGrid в какой-нибудь датасет, например, в TdxMemData, чтобы этот датасет далее экспортировать или распечатать другими компонентами. Наконец-то руки дошли. Хотел бы, чтобы великий All покритиковал код (класс). Возможно, что у вас будут ещё идеи по улучшению и доработке кода.
Здесь выложил
[more=И здесь повторяю:]
Код: unit uCxGridToMemTable;
interface
uses
cxGridDBTableView, cxGridCustomTableView, dxmdaset, DB, Classes, dxCore;
Type
TcxGridToMemTable = class(TObject)
private
fGrid: TcxCustomGridTableView;
fMemData: TdxMemData;
function GetValidName(AOwner: TComponent; AName: string): string;
procedure LoadAllRecords();
procedure LoadSelectedRecords();
protected
public
constructor Create(grid1: TcxCustomGridTableView; memdata1: TdxMemData = nil);
destructor Destroy; override;
procedure CreateFields();
procedure LoadData(bOnlySelected: boolean);
end;
implementation
uses
SysUtils, Dialogs, cxGridDBBandedTableView, cxCustomData;
{ TcxGridToMemTable }
constructor TcxGridToMemTable.Create(grid1: TcxCustomGridTableView; memdata1: TdxMemData = nil);
begin
//если не передаём в класс memdata1, то создаём его сами
if memdata1 = nil then
fMemData := TdxMemData.Create(nil)
else
fMemData := memdata1;
fGrid := grid1;
end;
destructor TcxGridToMemTable.Destroy;
begin
if fMemData <> nil then FreeAndNil(fMemData);
inherited;
end;
function TcxGridToMemTable.GetValidName(AOwner: TComponent;
AName: string): string;
var
I: Integer;
begin
//фунцию выдрал из модуля dxmdaset.pas
for I := 1 to Length(AName) do
if not (dxCharInSet(AName[I], ['A'..'z']) or dxCharInSet(AName[I], ['0'..'9'])) then
AName[I] := '_';
if dxCharInSet(AName[1], ['0'..'9']) then
AName := '_' + AName;
Result := AName;
I := 0;
while AOwner.FindComponent(Result) <> nil do
begin
Result := AName + IntToStr(I);
Inc(I);
end
end;
procedure TcxGridToMemTable.LoadAllRecords;
Var
i, f: integer;
FieldVal: Variant;
begin
//загружаем только видимые записи, т.к. пользователь может отфильтровать некоторые записи
fMemData.open;
if fGrid is TcxGridDBBandedTableView then
with TcxGridDBBandedTableView(fGrid) do
for I := 0 to fGrid.DataController.FilteredRecordCount - 1 do
begin
fMemData.Append;
for f := 0 to ColumnCount - 1 do
if fMemData.FindField(columns[f].DataBinding.Field.FieldName) <> nil then
begin
FieldVal := DataController.Values[DataController.FilteredRecordIndex[i], columns[f].Index];
fMemData.FieldByName(columns[f].DataBinding.Field.FieldName).Value := FieldVal;
end;//for f := 0 to ColumnCount - 1 do
fMemData.post;
end;//for I := 0 to fGrid.DataController.FilteredRecordCount - 1 do
if fGrid is TcxGridDBTableView then
with TcxGridDBTableView(fGrid) do
for I := 0 to fGrid.DataController.FilteredRecordCount - 1 do
begin
fMemData.Append;
for f := 0 to ColumnCount - 1 do
if fMemData.FindField(columns[f].DataBinding.Field.FieldName) <> nil then
begin
FieldVal := DataController.Values[DataController.FilteredRecordIndex[i], columns[f].Index];
fMemData.FieldByName(columns[f].DataBinding.Field.FieldName).Value := FieldVal;
end;//for f := 0 to ColumnCount - 1 do
fMemData.post;
end;//for I := 0 to fGrid.DataController.FilteredRecordCount - 1 do
end;
procedure TcxGridToMemTable.LoadData(bOnlySelected: boolean);
begin
fMemData.Open;
case bOnlySelected of
True : LoadSelectedRecords;
False: LoadAllRecords;
end;
end;
procedure TcxGridToMemTable.LoadSelectedRecords;
Var
i, f: integer;
FieldVal: Variant;
ARowIndex: Integer;
ARowInfo: TcxRowInfo;
begin
//загружаем только видимые записи, т.к. пользователь может отфильтровать некоторые записи
fMemData.open;
if fGrid is TcxGridDBBandedTableView then
with TcxGridDBBandedTableView(fGrid), TcxGridDBBandedTableView(fGrid).DataController do
begin
beginupdate;
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(ARowIndex);
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin
fMemData.Append;
for f := 0 to ColumnCount - 1 do
if fMemData.FindField(columns[f].DataBinding.Field.FieldName) <> nil then
begin
FieldVal := Values[ARowInfo.RecordIndex, columns[f].Index];
fMemData.FieldByName(columns[f].DataBinding.Field.FieldName).Value := FieldVal;
end;//for f := 0 to ColumnCount - 1 do
fMemData.post;
end;
end;//for I := 0 to GetSelectedCount - 1 do
finally
endupdate;
end;
end;//with
if fGrid is TcxGridDBTableView then
with TcxGridDBTableView(fGrid), TcxGridDBTableView(fGrid).DataController do
begin
beginupdate;
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(ARowIndex);
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin
fMemData.Append;
for f := 0 to ColumnCount - 1 do
if fMemData.FindField(columns[f].DataBinding.Field.FieldName) <> nil then
begin
FieldVal := Values[ARowInfo.RecordIndex, columns[f].Index];
fMemData.FieldByName(columns[f].DataBinding.Field.FieldName).Value := FieldVal;
end;//for f := 0 to ColumnCount - 1 do
fMemData.post;
end;
end;//for I := 0 to GetSelectedCount - 1 do
finally
endupdate;
end;
end;//with
end;
procedure TcxGridToMemTable.CreateFields();
Var
i: integer;
AField: TField;
begin
fMemData.close;
//удаляем все поля, чтобы создать их заново
with fMemData do
while FieldCount > 1 do
Fields[FieldCount - 1].Free;
if fGrid is TcxGridDBBandedTableView then
with TcxGridDBBandedTableView(fGrid) do
begin
for i := 0 to ColumnCount - 1 do
if Columns[i].Visible then
with TField.Create(fMemData) do
begin
AField := DefaultFieldClasses[Columns[i].DataBinding.Field.DataType].Create(fMemData);
AField.Name := GetValidName(fMemData, Name + Columns[i].DataBinding.Field.FieldName);
AField.DisplayLabel := Columns[i].DataBinding.Field.DisplayLabel;
AField.DisplayWidth := Columns[i].DataBinding.Field.DisplayWidth;
AField.EditMask := Columns[i].DataBinding.Field.EditMask;
AField.FieldName := Columns[i].DataBinding.Field.FieldName;
AField.Visible := Columns[i].DataBinding.Field.Visible;
AField.FieldKind := Columns[i].DataBinding.Field.FieldKind;
AField.DataSet := fMemData;
end;//with TField.Create(fMemData) do
fMemData.FieldDefs.Update;
end;//with TcxGridDBTableView(fGrid) do
if fGrid is TcxGridDBTableView then
with TcxGridDBTableView(fGrid) do
begin
for i := 0 to ColumnCount - 1 do
if Columns[i].Visible then
with TField.Create(fMemData) do
begin
AField := DefaultFieldClasses[Columns[i].DataBinding.Field.DataType].Create(fMemData);
AField.Name := GetValidName(fMemData, Name + Columns[i].DataBinding.Field.FieldName);
AField.DisplayLabel := Columns[i].DataBinding.Field.DisplayLabel;
AField.DisplayWidth := Columns[i].DataBinding.Field.DisplayWidth;
AField.EditMask := Columns[i].DataBinding.Field.EditMask;
AField.FieldName := Columns[i].DataBinding.Field.FieldName;
AField.Visible := Columns[i].DataBinding.Field.Visible;
AField.FieldKind := Columns[i].DataBinding.Field.FieldKind;
AField.DataSet := fMemData;
end;//with TField.Create(fMemData) do
fMemData.FieldDefs.Update;
end;//with TcxGridDBTableView(fGrid) do
end;
end.
Использование:
Var
cxGridToMemTable: TcxGridToMemTable;
begin
//memExport - TdxMemData
//dbgApart - TcxGridDBBandedTableView
TcxGridToMemTable.Create(dbgApart, memExport);
cxGridToMemTable.CreateFields;//создаём только видимые поля грида
cxGridToMemTable.LoadData(False);//загружаем данные, все или только выделенные записи
//далее заполненный memExport можно использовать в других компонентах, например отправить на печать с помощью FastReports или экспортировать с помощью EMS Advanced Data Export
Здесь выложил
[more=И здесь повторяю:]
Код: unit uCxGridToMemTable;
interface
uses
cxGridDBTableView, cxGridCustomTableView, dxmdaset, DB, Classes, dxCore;
Type
TcxGridToMemTable = class(TObject)
private
fGrid: TcxCustomGridTableView;
fMemData: TdxMemData;
function GetValidName(AOwner: TComponent; AName: string): string;
procedure LoadAllRecords();
procedure LoadSelectedRecords();
protected
public
constructor Create(grid1: TcxCustomGridTableView; memdata1: TdxMemData = nil);
destructor Destroy; override;
procedure CreateFields();
procedure LoadData(bOnlySelected: boolean);
end;
implementation
uses
SysUtils, Dialogs, cxGridDBBandedTableView, cxCustomData;
{ TcxGridToMemTable }
constructor TcxGridToMemTable.Create(grid1: TcxCustomGridTableView; memdata1: TdxMemData = nil);
begin
//если не передаём в класс memdata1, то создаём его сами
if memdata1 = nil then
fMemData := TdxMemData.Create(nil)
else
fMemData := memdata1;
fGrid := grid1;
end;
destructor TcxGridToMemTable.Destroy;
begin
if fMemData <> nil then FreeAndNil(fMemData);
inherited;
end;
function TcxGridToMemTable.GetValidName(AOwner: TComponent;
AName: string): string;
var
I: Integer;
begin
//фунцию выдрал из модуля dxmdaset.pas
for I := 1 to Length(AName) do
if not (dxCharInSet(AName[I], ['A'..'z']) or dxCharInSet(AName[I], ['0'..'9'])) then
AName[I] := '_';
if dxCharInSet(AName[1], ['0'..'9']) then
AName := '_' + AName;
Result := AName;
I := 0;
while AOwner.FindComponent(Result) <> nil do
begin
Result := AName + IntToStr(I);
Inc(I);
end
end;
procedure TcxGridToMemTable.LoadAllRecords;
Var
i, f: integer;
FieldVal: Variant;
begin
//загружаем только видимые записи, т.к. пользователь может отфильтровать некоторые записи
fMemData.open;
if fGrid is TcxGridDBBandedTableView then
with TcxGridDBBandedTableView(fGrid) do
for I := 0 to fGrid.DataController.FilteredRecordCount - 1 do
begin
fMemData.Append;
for f := 0 to ColumnCount - 1 do
if fMemData.FindField(columns[f].DataBinding.Field.FieldName) <> nil then
begin
FieldVal := DataController.Values[DataController.FilteredRecordIndex[i], columns[f].Index];
fMemData.FieldByName(columns[f].DataBinding.Field.FieldName).Value := FieldVal;
end;//for f := 0 to ColumnCount - 1 do
fMemData.post;
end;//for I := 0 to fGrid.DataController.FilteredRecordCount - 1 do
if fGrid is TcxGridDBTableView then
with TcxGridDBTableView(fGrid) do
for I := 0 to fGrid.DataController.FilteredRecordCount - 1 do
begin
fMemData.Append;
for f := 0 to ColumnCount - 1 do
if fMemData.FindField(columns[f].DataBinding.Field.FieldName) <> nil then
begin
FieldVal := DataController.Values[DataController.FilteredRecordIndex[i], columns[f].Index];
fMemData.FieldByName(columns[f].DataBinding.Field.FieldName).Value := FieldVal;
end;//for f := 0 to ColumnCount - 1 do
fMemData.post;
end;//for I := 0 to fGrid.DataController.FilteredRecordCount - 1 do
end;
procedure TcxGridToMemTable.LoadData(bOnlySelected: boolean);
begin
fMemData.Open;
case bOnlySelected of
True : LoadSelectedRecords;
False: LoadAllRecords;
end;
end;
procedure TcxGridToMemTable.LoadSelectedRecords;
Var
i, f: integer;
FieldVal: Variant;
ARowIndex: Integer;
ARowInfo: TcxRowInfo;
begin
//загружаем только видимые записи, т.к. пользователь может отфильтровать некоторые записи
fMemData.open;
if fGrid is TcxGridDBBandedTableView then
with TcxGridDBBandedTableView(fGrid), TcxGridDBBandedTableView(fGrid).DataController do
begin
beginupdate;
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(ARowIndex);
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin
fMemData.Append;
for f := 0 to ColumnCount - 1 do
if fMemData.FindField(columns[f].DataBinding.Field.FieldName) <> nil then
begin
FieldVal := Values[ARowInfo.RecordIndex, columns[f].Index];
fMemData.FieldByName(columns[f].DataBinding.Field.FieldName).Value := FieldVal;
end;//for f := 0 to ColumnCount - 1 do
fMemData.post;
end;
end;//for I := 0 to GetSelectedCount - 1 do
finally
endupdate;
end;
end;//with
if fGrid is TcxGridDBTableView then
with TcxGridDBTableView(fGrid), TcxGridDBTableView(fGrid).DataController do
begin
beginupdate;
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(ARowIndex);
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin
fMemData.Append;
for f := 0 to ColumnCount - 1 do
if fMemData.FindField(columns[f].DataBinding.Field.FieldName) <> nil then
begin
FieldVal := Values[ARowInfo.RecordIndex, columns[f].Index];
fMemData.FieldByName(columns[f].DataBinding.Field.FieldName).Value := FieldVal;
end;//for f := 0 to ColumnCount - 1 do
fMemData.post;
end;
end;//for I := 0 to GetSelectedCount - 1 do
finally
endupdate;
end;
end;//with
end;
procedure TcxGridToMemTable.CreateFields();
Var
i: integer;
AField: TField;
begin
fMemData.close;
//удаляем все поля, чтобы создать их заново
with fMemData do
while FieldCount > 1 do
Fields[FieldCount - 1].Free;
if fGrid is TcxGridDBBandedTableView then
with TcxGridDBBandedTableView(fGrid) do
begin
for i := 0 to ColumnCount - 1 do
if Columns[i].Visible then
with TField.Create(fMemData) do
begin
AField := DefaultFieldClasses[Columns[i].DataBinding.Field.DataType].Create(fMemData);
AField.Name := GetValidName(fMemData, Name + Columns[i].DataBinding.Field.FieldName);
AField.DisplayLabel := Columns[i].DataBinding.Field.DisplayLabel;
AField.DisplayWidth := Columns[i].DataBinding.Field.DisplayWidth;
AField.EditMask := Columns[i].DataBinding.Field.EditMask;
AField.FieldName := Columns[i].DataBinding.Field.FieldName;
AField.Visible := Columns[i].DataBinding.Field.Visible;
AField.FieldKind := Columns[i].DataBinding.Field.FieldKind;
AField.DataSet := fMemData;
end;//with TField.Create(fMemData) do
fMemData.FieldDefs.Update;
end;//with TcxGridDBTableView(fGrid) do
if fGrid is TcxGridDBTableView then
with TcxGridDBTableView(fGrid) do
begin
for i := 0 to ColumnCount - 1 do
if Columns[i].Visible then
with TField.Create(fMemData) do
begin
AField := DefaultFieldClasses[Columns[i].DataBinding.Field.DataType].Create(fMemData);
AField.Name := GetValidName(fMemData, Name + Columns[i].DataBinding.Field.FieldName);
AField.DisplayLabel := Columns[i].DataBinding.Field.DisplayLabel;
AField.DisplayWidth := Columns[i].DataBinding.Field.DisplayWidth;
AField.EditMask := Columns[i].DataBinding.Field.EditMask;
AField.FieldName := Columns[i].DataBinding.Field.FieldName;
AField.Visible := Columns[i].DataBinding.Field.Visible;
AField.FieldKind := Columns[i].DataBinding.Field.FieldKind;
AField.DataSet := fMemData;
end;//with TField.Create(fMemData) do
fMemData.FieldDefs.Update;
end;//with TcxGridDBTableView(fGrid) do
end;
end.
Использование:
Var
cxGridToMemTable: TcxGridToMemTable;
begin
//memExport - TdxMemData
//dbgApart - TcxGridDBBandedTableView
TcxGridToMemTable.Create(dbgApart, memExport);
cxGridToMemTable.CreateFields;//создаём только видимые поля грида
cxGridToMemTable.LoadData(False);//загружаем данные, все или только выделенные записи
//далее заполненный memExport можно использовать в других компонентах, например отправить на печать с помощью FastReports или экспортировать с помощью EMS Advanced Data Export
Есть TcxGridDBBandedTableView. Подскажите, как узнать принадлежность колонки к тому или иному бэнду?
Получается, что если колонки не скрывать, а скрыть бэнд, то Columns[i].Visible всё равно вернёт True, хотя по сути колонка-то не видна
Добавлено:
Ура. Нашёл Columns[i].Position.Band.Visible
Получается, что если колонки не скрывать, а скрыть бэнд, то Columns[i].Visible всё равно вернёт True, хотя по сути колонка-то не видна
Добавлено:
Ура. Нашёл Columns[i].Position.Band.Visible
Всем привет нужна помощь. DevExpress v50/ cxGrid. У Master уровня 3 Detail уровня. Не могу поставить курсор на первую строку Detail уровня при переключении табов. ловлю событием OnActiveTbChanged, но он возвращает его обратно на запись Master уровня. Кто может что посоветовать?
Код например такой:
Код:
if (ALevel=cxGrid1Level2) or (ALevel=cxGrid1Level5) or (ALevel=cxGrid1Level6) then
begin
RowIndex:=ALevel.DataRelation.DataController.GetFocusedRowIndex;
if TcxGridViewData(ALevel.GridView.Clones[RowIndex].ViewData).RowCount>0 then
begin
TcxGridViewData(ALevel.GridView.Clones[RowIndex].ViewData).Rows[0].Focused:=true;
ShowMessage(inttostr(TcxGridViewData(ALevel.GridView.Clones[RowIndex].ViewData).RecordCount));
end;
end;
Код например такой:
Код:
if (ALevel=cxGrid1Level2) or (ALevel=cxGrid1Level5) or (ALevel=cxGrid1Level6) then
begin
RowIndex:=ALevel.DataRelation.DataController.GetFocusedRowIndex;
if TcxGridViewData(ALevel.GridView.Clones[RowIndex].ViewData).RowCount>0 then
begin
TcxGridViewData(ALevel.GridView.Clones[RowIndex].ViewData).Rows[0].Focused:=true;
ShowMessage(inttostr(TcxGridViewData(ALevel.GridView.Clones[RowIndex].ViewData).RecordCount));
end;
end;
Возможно ли программно изменить цвет заголовка столбца по которому произведена фильтрация.
DevExpress v52/ cxGrid.
DevExpress v52/ cxGrid.
С помощью события OnGetContentStyle можно попробовать.
GRES
Событие OnGetHeaderStyle.
if cxGrid1DBTableView1.Columns[I].Filtered then
// ваши действия по присвоению стиля для заголовка
end;
Только у вас будет приведение к нужному типу AItem и проверка свойства Filtered.
Событие OnGetHeaderStyle.
if cxGrid1DBTableView1.Columns[I].Filtered then
// ваши действия по присвоению стиля для заголовка
end;
Только у вас будет приведение к нужному типу AItem и проверка свойства Filtered.
afiget
Спасибо. Вроде получается.
Только как сделать чтобы заголовок менялся
только у того столбца на котором висит фильтр
Спасибо. Вроде получается.
Только как сделать чтобы заголовок менялся
только у того столбца на котором висит фильтр
Применять стиль только к тому заголовку
Никто ничего не посоветует по установке фокуса на первую строку Detail уровня при переключении табов?
Цитата:
Не могу поставить курсор на первую строку Detail уровня при переключении табов.
так?
Код:
procedure TForm1.cxGrid1ActiveTabChanged(Sender: TcxCustomGrid;
ALevel: TcxGridLevel);
begin
ALevel.GridView.DataController.GotoFirst;
end;
X11 По приведенному коду он в Detail View даже не заходит. DevExpress V.50
Задача состоит в том что на одном Master уровне висит 3 Detail уровня которые переключаются по табам. При раскрытии фокус на первую строку ставил так:
Код:
procedure TfmMain.cxGrid1DBTableView1DataControllerDetailExpanded(
ADataController: TcxCustomDataController; ARecordIndex: Integer);
var ADDC:TcxCustomDataController;
begin
ADDC:= ADataController.GetDetailDataController
(ARecordIndex,ADataController.GetDetailActiveRelationIndex(ARecordIndex));
if ADDC.RecordCount<>0 then
TcxGridDataController(ADDC).GridView.ViewData.Records[0].Focused:=true
else
ADataController.FocusedRecordIndex:=ARecordIndex;
end;
Задача состоит в том что на одном Master уровне висит 3 Detail уровня которые переключаются по табам. При раскрытии фокус на первую строку ставил так:
Код:
procedure TfmMain.cxGrid1DBTableView1DataControllerDetailExpanded(
ADataController: TcxCustomDataController; ARecordIndex: Integer);
var ADDC:TcxCustomDataController;
begin
ADDC:= ADataController.GetDetailDataController
(ARecordIndex,ADataController.GetDetailActiveRelationIndex(ARecordIndex));
if ADDC.RecordCount<>0 then
TcxGridDataController(ADDC).GridView.ViewData.Records[0].Focused:=true
else
ADataController.FocusedRecordIndex:=ARecordIndex;
end;
Подскажите как в cxGrid (свойство NullString не подходит) или ClientDataSet выставить значение по умолчанию. DevExpress v48. Спасибо.
Man_Without_Face
Для поля выставляешь свойство DefaultExpression
Для поля выставляешь свойство DefaultExpression
salexn1
А какое выражение? У меня строковое поле, если null нужен 0. Так не работает: '0'
А какое выражение? У меня строковое поле, если null нужен 0. Так не работает: '0'
Не знает ли кто - есть cxgrid, в нем мона менять ширину колонок и делать их видимыми-невидимыми, так вот патаюсь сохранять эти свойства в ini и грузить их от туда, почему то ничего не работает вот код
Код:
Чтение свойств из ini
procedure TForm6.FormCreate(Sender: TObject);
begin
cxGridDBTableView1.RestoreFromIniFile(ExtractFilePath(Application.ExeName) + 'viewconfig.ini',false,false,[gsoUseSummary],'SkladView');
cxGridDBTableView1.RestoreFromIniFile(ExtractFilePath(Application.ExeName) + 'viewconfig3.ini',false,false,[gsoUseSummary],'SkladView3');
form1.BuildTree(dxTreeView1);
end;
Сохранение свойст в ini
procedure TForm6.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
cxGridDBTableView1.StoreToIniFile(ExtractFilePath(Application.ExeName) + 'viewconfig.ini',true,[gsoUseSummary],'SkladView');
cxGridDBTableView2.StoreToIniFile(ExtractFilePath(Application.ExeName) + 'viewconfig3.ini',true,[gsoUseSummary],'SkladView3');
end;
Код:
Чтение свойств из ini
procedure TForm6.FormCreate(Sender: TObject);
begin
cxGridDBTableView1.RestoreFromIniFile(ExtractFilePath(Application.ExeName) + 'viewconfig.ini',false,false,[gsoUseSummary],'SkladView');
cxGridDBTableView1.RestoreFromIniFile(ExtractFilePath(Application.ExeName) + 'viewconfig3.ini',false,false,[gsoUseSummary],'SkladView3');
form1.BuildTree(dxTreeView1);
end;
Сохранение свойст в ini
procedure TForm6.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
cxGridDBTableView1.StoreToIniFile(ExtractFilePath(Application.ExeName) + 'viewconfig.ini',true,[gsoUseSummary],'SkladView');
cxGridDBTableView2.StoreToIniFile(ExtractFilePath(Application.ExeName) + 'viewconfig3.ini',true,[gsoUseSummary],'SkladView3');
end;
Должно всё работать. Ты убери всё лишнее: ',false,false,[gsoUseSummary],
Man_Without_Face
Хм... Так он по умолчанию Null и ставит...
Хм... Так он по умолчанию Null и ставит...
Цитата:
Ты убери всё лишнее: ',false,false,[gsoUseSummary],
а что тут лишнего - параметры ж надо передавать.... , кстати забыл сказать конфигурация моя сохраняется в ini, НО НЕ ВОССТАНАВЛИВАЕТСЯ из ini
хочю редактировать выделенные ячейки с помощью tableview (свойство locate dataset слишком долго работает), но
Код: cxGridDBTableView.Controller.SelectedRecords[i].Values[cxGridDBTableView.Controller.FocusedColumn.Index] := 5;
Код: cxGridDBTableView.Controller.SelectedRecords[i].Values[cxGridDBTableView.Controller.FocusedColumn.Index] := 5;
Цитата:
а что тут лишнего - параметры ж надо передавать....
передавай просто путь
сохраняем
dbgApart.StoreToIniFile(GetKvx2008UserDocsPath + 'Настройки\ExportApart.ini');
восстанавливаем
dbgApart.RestoreFromIniFile(GetKvx2008UserDocsPath + 'Настройки\ExportApart.ini');
Подскажите на какое событие в cxGrid можно проанализировать датасет и записать в грид другое значение? Что то вроде такого:
if cdsOX.FieldByName('discountPercent').asstring = '' then
cxGridOXDBTableView1DiscountPercent.editvalue := '0';
OnGetDataText у ячейки выдает ошибку.
if cdsOX.FieldByName('discountPercent').asstring = '' then
cxGridOXDBTableView1DiscountPercent.editvalue := '0';
OnGetDataText у ячейки выдает ошибку.
Цитата:
передавай просто путь
У меня грид привязан к датасурсу, в не отображается таблица БД, сохранять и восстанавливать нужно только ширину и видимость колонок
Man_Without_Face
Зачем на cxGrid, когда это нужно делать на DataSet: OnNewRecord, BeforeEdit и т.д., в заисимости от того когда нужно...
Зачем на cxGrid, когда это нужно делать на DataSet: OnNewRecord, BeforeEdit и т.д., в заисимости от того когда нужно...
Цитата:
OnNewRecord
- пустые строки:
if cdsOX.FieldByName('discountSum').asstring = '' then
cdsOX.FieldByName('discountSum').asstring := '5';
Цитата:
BeforeEdit
- выдает ошибку: DataSet not in edit or insert mode.
Добавлено:
А если так: if cdsOX.FieldByName('price_byr').asstring = '' then
cxGridOXDBTableView1Price_byr.editvalue := '0';
то в одном случае переполнение стека, а в другом пустые строки.
Man_Without_Face
и что?
Цитата:
этот код не работает?
Цитата:
так переведите в edit...
В конце концов на BeforePost можно проверять
и что?
Цитата:
if cdsOX.FieldByName('discountSum').asstring = '' then
cdsOX.FieldByName('discountSum').asstring := '5';
этот код не работает?
Цитата:
- выдает ошибку: DataSet not in edit or insert mode.
так переведите в edit...
В конце концов на BeforePost можно проверять
Andryshok
Цитата:
Что вы мудрите? Сделайте по простому:
сохранить
Код: for I := 0 to TableView.ColumnCount - 1 do
begin
IniFile.WriteBool(Section, TableView.Columns[I].Name + '.Visible', TableView.Columns[I].Visible);
IniFile.WriteInteger(Section, TableView.Columns[I].Name + '.Width', TableView.Columns[I].Width);
end;
Цитата:
сохранять и восстанавливать нужно только ширину и видимость колонок
Что вы мудрите? Сделайте по простому:
сохранить
Код: for I := 0 to TableView.ColumnCount - 1 do
begin
IniFile.WriteBool(Section, TableView.Columns[I].Name + '.Visible', TableView.Columns[I].Visible);
IniFile.WriteInteger(Section, TableView.Columns[I].Name + '.Width', TableView.Columns[I].Width);
end;
Цитата:
marserВот блин, свежая мысля , и то правда, СПС
salexn1
Может я неправильно выразился, я отрываю датасет с данными, и поля где определенные записи пустые, нужно вставить ноль (типы полей - строковые).
Может я неправильно выразился, я отрываю датасет с данными, и поля где определенные записи пустые, нужно вставить ноль (типы полей - строковые).
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.