如何让一个DBGrid的一列以下拉列表的形式出现?

ynduanlian 2003-09-15 10:27:31
我做了DBGrid作为一个表的录入界面,录入收款纪录:
收款员ID、单号、金额

另有一张表纪录收款员信息:收款员ID,姓名

我想实现这样的效果,DBGrid中收款员一栏以收款员名字出现,比如说下拉列表,
录入收款单时录入人不必记忆收款人ID,直接能下拉列表选一下收款人姓名即可,即

DBGrid为

收款人(姓名) 单号 金额

不知可否实现?
...全文
64 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
statesman 2003-09-15
  • 打赏
  • 举报
回复
在DBGrid 网 格 中 实 现 下 拉 列 表, 设 置 好DBGrid 中 该 字 段 的PickList 字 符 串 列 表、 初 始 的 序 号 值DropDownRows 即 可。 以 职 工 信 息 库 中 的 籍 贯 字 段( 字 符 串 类 型) 为 例, 具 体 设 计 步 骤 如 下:

---- 1、 在 窗 体 上 放 置Table1、DataSource1、DBGrid1、DBNavigator1 等 控 件 对 象, 按 下 表 设 置 各 个 对 象 的 属 性:
---------------------------------------
对象 属性 设定值
---------------------------------------
Table1 DataBase sy1
TableName zgk.dbf //职工信息库
DataSource1 DataSet Table1
DbGrid1 DataSource DataSource1
DBNavigator1 DataSource Datasource1
-------------------------------------------

---- 2、 双 击Table1, 在 弹 出 的Form1.Table1 窗 口 中, 用 右 键 弹 出 快 捷 菜 单, 单 击Add Fields 菜 单 项; 选 择 所 有 的 字 段 后, 按OK 按 钮。

---- 3、 修 改 第2 步 新 增 字 段 的DisplayLabel 属 性。 以Table1ZGBH 字 段 为 例, 在Object Inspector 窗 口 中 选 择Table1ZGBH, 修 改 属 性DisplayLabel= 职 工 编 号, 其 余 字 段 类 似。

---- 4、 双 击DBGrid1, 在 弹 出 的Editing DBGrid1.Columns 窗 口 中, 单 击Add all Fields 按 钮, 增 加Table1 的 所 有 字 段。

---- 5、 在Editing DBGrid1.Columns 窗 口, 选 择jg 这 一 行, 切 换 到Object Inspector 窗 口, 修 改 它 的PickList.Strings 为“ 湖 北 枝 江 市
北 京 市
河 南 平 顶 山 市
浙 江 德 清 市”

---- 6、 在Form1.Oncreate 事 件 中 写 入 语 句:
---- Table1.Open;

---- 7、F9 运 行, 用 鼠 标 点 击 某 个 记 录 的 籍 贯 字 段, 右 边 即 出 现 一 个 按 钮, 点 击 这 个 按 钮, 可 出 现 一 个 下 拉 列 表, 包 含 第5 步 中 输 入 的 四 行 字 符 串, 可 用 鼠 标 进 行 选 择。 当 然 也 可 以 自 行 输 入 一 个 并 不 属 下 拉 列 表 中 的 字 符 串。

jpyc 2003-09-15
  • 打赏
  • 举报
回复
http://218.56.11.178:8020/web/index.aspx

->下载基地->例程-数据库/报表->在DBGRID中下拉列表的显示
lihongyue 2003-09-15
  • 打赏
  • 举报
回复
可以呀,楼主,你可以这样:
var
id1:string;
with ADOQuery do
begin
Close;
SQL.Clear;
SQL.Text:='select ID from table1 where 姓名='''+dbgrid1.Fields[1].AsString+'''' //把你从Picklist下拉列表选取的姓名对应的ID取出来
Open;
id1:=FieldByName('ID').Asstring; //用这一变量存入你提取的ID号
ynduanlian 2003-09-15
  • 打赏
  • 举报
回复
我还是不太明白,我的问题是:

录入人员录入时,用Picklist下拉列表,他选了收款员张三,如何存入表中的是张三的ID,而不是他的姓名?
wypepsi 2003-09-15
  • 打赏
  • 举报
回复
用picklist肯定可以搞定 picklist应该是一个stringlist 至于你说的id和收款员姓名对应 自己写个函数就摆平了三 这个你应该没有问题把
雨后阳光2000 2003-09-15
  • 打赏
  • 举报
回复
//用于从数据库中得到数据时,转换显示

procedure TForm1.ADOTable1idGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
case Sender.AsInteger of
0: Text := '男';
1: Text := '女';
2: Text := '两性人';
else
Text := Sender.AsString;
end;
end;
FSU 2003-09-15
  • 打赏
  • 举报
回复
楼上的写的不错,能否提高一下执行效率
SQL.Text:='select '姓名' from Table1';
ynduanlian 2003-09-15
  • 打赏
  • 举报
回复
pinklist加上收款员姓名?
但在表里面想存入的是收款员ID,我如何让pinklist中姓名和ID自动对应上?
tjff2000 2003-09-15
  • 打赏
  • 举报
回复
把那一列的buttonstyle设为cbsauto,在picklist里输入数据即可。
lihongyue 2003-09-15
  • 打赏
  • 举报
回复
当然可以实现了:
参考一下://动态创建
var
a:TStringList;
begin
a:=TStringList.Create;
with ADOQuery do
begin
Close;
SQL.Clear;
SQL.Text:='select * from Table1';
Open;
while not Eof do
begin
a.Add(FieldValues['姓名']);
Next;
end;
end;
dbgrid1.Columns[1].PickList:=a;
a.Free;
hmzgz81 2003-09-15
  • 打赏
  • 举报
回复
在 dbGrid 里双击。再在,editing dbgrid1.columns 中选择要的栏
再在pinklist 中添加就ok了!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧