如何在DBGrid控件中用ComboBox控件,但是ComboBox中显示的是经过处理的,不是数据库中的原值(100分)

  • 主题发起人 主题发起人 jeremy_z
  • 开始时间 开始时间
J

jeremy_z

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库中用0,1,2,3,4表示"幼儿园","小学","初中","高中","大学"等5个状态
用DBGrid显示和编辑修改,希望在DBGrid中用ComboBox,
而且添加,编辑时都是显示状态,而不是0~5的数值。
希望说的详细一点
如果用其它控件的话请说明因该修改的属性,谢谢!
 
用StringGrid吧。愚见
 
用增强DbGrid,带有demoS
 
UP,我也正需要这方面的。[:)]
 
to: ldb
用增强DbGrid是什么?
是控件吗?在哪里下载?
 
自己写代码要灵活一点
 
http://www.51delphi.com ehlib24.rar
 
to : gwbbxiong
自己写代码因该怎样写呢?
能不能给我一个Demo jeremy_z@sina.com
谢谢!
 
to: ldb
谢谢,
已经装上了,正在看它的Demo。
能不能告诉我应该设置那些属性,
 
用了ehlib后,我已经解决了问题,谢谢ldb
但是我想如果编程实现能学到的东西跟多一些。
希望大家能给我一个例子程序,
谢谢!
 
//DbGrid的Column有个PickList属性相当于一个StringList,下面这个例子有测试通过
//Table1连到主表,Query1是个临时表,用一个TStringList存放ID字段

var
Form1 : TForm1;

implementation
var
lst_OrderNo : TStringList;
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Open;

lst_OrderNo := TStringList.Create;
with Query2 do
begin
Close;
SQL.Text := 'select ID,Name from Studnet order by ID';
OPen;
while not Eof do
begin
DBGrid1.Columns[0].PickList.Add(FieldByName('Name').AsString);
lst_OrderNo.Add(IntToStr(FieldByName('ID').AsString));
Next;
end;
Close;
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
lst_OrderNo.Free;
Table1.Close;
end;

procedure TForm1.Query1BeforePost(DataSet: TDataSet);
begin
Table.FieldByName('ID').AsString := lst_OrderNo.Strings[DBGrid1.Columns[0].PickList.IndexOf(Table1.FieldByName('Name').AsString)];
end;
 
为什么不用查找字段?LOOKUP FIELD 类似这样的问题,用LOOKUP FIELD 最合适了,不明白。
我都是这样用的。
 
同意笑傲江湖1976
 
to :笑傲江湖1976
能不能说的再详细一点?
谢谢!
 
在dbgrid中选择要显示下拉框的字段,设置Object Inspector的Picklist就可以了.好像不
用专门找什么控件.
 
没有明白!
再说详细一些吧!
 
to :MichaelZhu
如果只想用ComboBox的话,可以直接设置Picklist就可以,
可是我所显示的不是数据库中的内容,而是于数据库中内容相对应的字段!
 
以下是从资料中拷贝的
建议jeremy_z去仔细读一些DELPHI的资料,一页一页的看完。
11.3.5 查找字段
用户在使用数据库时,通常会对无休止地输入数据感到厌倦,因为有些是本来可以不做的。
使用查找字段可以部分满足要求。
查找字段可以从另外一个数据库中提取数据。例如,用户打算添加一项订单,希望直接使
用姓名而不是号码(C u s t N o)来指定客户。
例程S 11_6 该例程(运行界面如图11 - 2 8所示)实现了从e m p l o y e e . d b表中读取客户的姓
名。
具体实现过程如下:
1) 新创建一个应用程序工程。
2) 参照图11 - 2 9定制窗体。在窗体上添加两个Ta b l e组件、两个D a t a S o u r c e组件、一个
D B N a v i g a t o r组件和一个D B G r i d组件。
各个组件的属性设置如表11 - 5所示。
3) 选中Ta b l e 2组件后单击鼠标右键,通过右键弹出式菜单命令Fields Editor 打开
F o r m 1 . Ta b l e 1窗体。
图11-28 例程S11_5的运行界面图11-29 定制例程S11_6中的Form1窗体
在F o r m 1 . Ta b l e 1窗体中使用右键弹出式菜单命令Add fields...添加字段,注意将E m p N o字段
选中。
使用右键弹出式菜单命令New fields...创建查找字段C u s t o m e r N a m e,具体的设置如图11 - 3 0
所示。其中Field Ty p e项中必须选中L o o k u p单选按钮, D a t a s e t代表提取查找字段的数据集,
Result Field是在查找字段中显示的字段,Key Fields和Lookup Fields定义了两个表的连接条件,
即根据E m p N o决定F i r s t N a m e。
4) 编译、链接和运行程序,测试效果。
在图11 - 2 8中可以看到,在编辑C u s t o m e r N a m e列时,有一个下拉式组合框,列出了客户的
姓名。
图11-30 在例程S11_6中创建计算字段
CustomerName
表11-5 例程S 11 _ 6中各组件的属性设置
组件名称属性
Ta b l e 1 Active: True
DatabaseName: DBDEMOS
TableName: employee.db
D a t a S o u r c e 1 DataSet: Ta b l e 1
Ta b l e 2 Active: True
DatabaseName: DBDEMOS
TableName: orders.db
D a t a S o u r c e 2 DataSet: Ta b l e 2
D B N a v i g a t o r 1 DataSource: DataSource2
D B G r i d 1 DataSource: DataSource2
 
谢谢,笑傲江湖1976
可是数据库是在后台的Unix主机上,而且正在进行其它的服务,不能在上面再建表了
还有其它办法吗?
 
后退
顶部