Delphi DBGrid条件dbcombo
我有一个有两列的表。ConfigItem和ConfigValue。现在我想在dbgrid中填充它,其中ConfigValue应该是dbcombobox 示例ConfigItem(第一列) 产品 产品类型 项目类型 项目 ConfigValue应该有一个dbcombobox,combobox的项目应该基于第一列中的值填充 例如。 如果用户单击第一行,该行将产品作为配置项,那么对于同一行,网格中的ConfigValue列应包含带有产品列表的组合框 可能我可以使用网格的BeforeDrawCell事件,但我正在尝试找到一种方法,通过使用adoquery或dataset组件来处理此事件 请有人指导解决这个问题的方法好吗 提前感谢,,Delphi DBGrid条件dbcombo,delphi,tdbgrid,Delphi,Tdbgrid,我有一个有两列的表。ConfigItem和ConfigValue。现在我想在dbgrid中填充它,其中ConfigValue应该是dbcombobox 示例ConfigItem(第一列) 产品 产品类型 项目类型 项目 ConfigValue应该有一个dbcombobox,combobox的项目应该基于第一列中的值填充 例如。 如果用户单击第一行,该行将产品作为配置项,那么对于同一行,网格中的ConfigValue列应包含带有产品列表的组合框 可能我可以使用网格的BeforeDrawCell事件
Divyesh您可以使用AfterScrolleEvent为列指定选取列表。
Picklist是指分配给主StringList对象的StringList。 在Delphi版本上,您可以使用通用词典
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, ADODB;
type
TForm2 = class(TForm)
ADODataSet1: TADODataSet;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
procedure ADODataSet1AfterScroll(DataSet: TDataSet);
private
{ Private-Deklarationen }
FList: TStringList;
public
{ Public-Deklarationen }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.ADODataSet1AfterScroll(DataSet: TDataSet);
var
idx: Integer;
begin
if Assigned(FList) and (DBGrid1.Columns.Count > 1) then
begin
DBGrid1.Columns[1].ButtonStyle := cbsAuto;
idx := FList.IndexOf(DBGrid1.Columns[0].Field.asString);
if idx > -1 then
DBGrid1.Columns[1].PickList := TStringList(FList.Objects[idx])
else
DBGrid1.Columns[1].PickList := nil;
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
var
i: Integer;
begin // some demo filling
FList := TStringList.Create;
FList.AddObject('A1A1', TStringList.Create);
for i := 0 to 10 do
TStringList(FList.Objects[FList.Count - 1]).Add(Format('group1_%d', [i]));
FList.AddObject('A1A2', TStringList.Create);
for i := 0 to 10 do
TStringList(FList.Objects[FList.Count - 1]).Add(Format('group2_%d', [i]));
end;
procedure TForm2.FormDestroy(Sender: TObject);
var
i: Integer;
begin
for I := 0 to FList.Count - 1 do Flist.Objects[i].Free;
FList.Free;
end;
end.
您可以使用AfterScrolleEvent为列指定选取列表。
Picklist是指分配给主StringList对象的StringList。 在Delphi版本上,您可以使用通用词典
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, ADODB;
type
TForm2 = class(TForm)
ADODataSet1: TADODataSet;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
procedure ADODataSet1AfterScroll(DataSet: TDataSet);
private
{ Private-Deklarationen }
FList: TStringList;
public
{ Public-Deklarationen }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.ADODataSet1AfterScroll(DataSet: TDataSet);
var
idx: Integer;
begin
if Assigned(FList) and (DBGrid1.Columns.Count > 1) then
begin
DBGrid1.Columns[1].ButtonStyle := cbsAuto;
idx := FList.IndexOf(DBGrid1.Columns[0].Field.asString);
if idx > -1 then
DBGrid1.Columns[1].PickList := TStringList(FList.Objects[idx])
else
DBGrid1.Columns[1].PickList := nil;
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
var
i: Integer;
begin // some demo filling
FList := TStringList.Create;
FList.AddObject('A1A1', TStringList.Create);
for i := 0 to 10 do
TStringList(FList.Objects[FList.Count - 1]).Add(Format('group1_%d', [i]));
FList.AddObject('A1A2', TStringList.Create);
for i := 0 to 10 do
TStringList(FList.Objects[FList.Count - 1]).Add(Format('group2_%d', [i]));
end;
procedure TForm2.FormDestroy(Sender: TObject);
var
i: Integer;
begin
for I := 0 to FList.Count - 1 do Flist.Objects[i].Free;
FList.Free;
end;
end.