在DBGrid中怎样实现:
1、点击某个单元格后出现下拉列表(列表中的内容来自Table1的Field1字段)
2、点击某个单元格后弹出Form2,在Form2的ComboBox1中选择值之后,单元格的内容为该值
3、单元格的值只能通过上述方法得到,直接输入无效
1、点击某个单元格后出现下拉列表(列表中的内容来自Table1的Field1字段)
2、点击某个单元格后弹出Form2,在Form2的ComboBox1中选择值之后,单元格的内容为该值
3、单元格的值只能通过上述方法得到,直接输入无效
如果非要用TDBGrid,参考http://delphi.about.com/od/usedbvcl/l/aa081903a.htm
with Dbgrid1,Dbgrid1.DataSource.DataSet do
begin
SelectedField := FieldByName('下拉的字段');
with Columns[SelectedIndex] do
with PickList do
begin
Clear;
while not table1.eof do
begin
Add(field1.值);
table1.next;
end;
AutoDropDown := true;
end;
end;
2.在form1的单元 中,写公共函数 如:function ReturnValue :string;
function ReturnValue :string;
begin
result := '';
form1 := Tform1.Create(nil);
with TForm1 do
try
if showModal=mrok then
result := form1.某值
finally
FreeAndNil(form1);
end;
end;在dbgrid的onKeypress事件里
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
with TDBGrid(Sender) do
begin
if SelectedField.FieldName = 'abc' then
SelectedField.AsString := ReturnValue;
end;
end;
3.设为只读试试吧
把dbgrid的options的dgediting设为false可以了吧?
begin
SelectedField := FieldByName('下拉的字段');
with Columns[SelectedIndex] do
with PickList do
begin
Clear;
while not table1.eof do
begin
Add(field1.值);
table1.next;
end;
AutoDropDown := true;
end;
end;__________________________________________________________
这段代码太乱了,能不能写清楚点(不要用with)。
好厉害,佩服!
谢谢你的代码,以前我自己弄的时候,都是用的很罗嗦的代码实现的。