Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 4)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

linker_2009



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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.

Всего записей: 143 | Зарегистр. 14-09-2009 | Отправлено: 03:46 29-10-2011 | Исправлено: linker_2009, 04:21 29-10-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 4)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru