delphi7 dbgrid中加入COMBOBOX

在DBGrid 网 格 中 实 现 下 拉 列 表, 设 置 好DBGrid 中 该 字 段 的PickList 
字 符 串 列 表、 初 始 的 序 号 值DropDownRows 即 可。 以 职 工 信 息 库 中 
的 籍 贯 字 段( 字 符 串 类 型) 为 例, 具 体 设 计 步 骤 如 下: 
1、 在 窗 体 上 放 置Table1、DataSource1、DBGrid1、DBNavigator1 等 控 件 对 象,
按 下 表 设 置 各 个 对 象 的 属 性:

---------------------------------------
对象       属性         设定值
---------------------------------------
Table1       DataBase     sy1
             Table        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 步 中 输 入
的 四 行 字 符 串, 可 用 鼠 标 进 行 选 择。 当 然 也 可 以 自 行 输 入 一 个
并 不 属 下 拉 列 表 中 的 字 符 串。

DelphiDBGrid没有内置的下拉选择功能。但是我们可以通过一些技巧来实现下拉选择。 一种常见的方法是创建一个隐藏的ComboBox组件,并将其放置在DBGrid上方。当用户单击需要进行下拉选择的单元格时,我们可以根据单元格的位置和数据源获取该单元格对应的数据,然后将数据填充到ComboBox并显示。 当用户选择下拉列表的某个选项时,我们可以通过ComboBox的OnChange事件来更新DBGrid单元格的值,并将ComboBox隐藏起来。 下面是一个简单的示例代码: ```delphi unit MainForm; interface uses // 其他引用的单元 type TForm1 = class(TForm) DBGrid1: TDBGrid; ComboBox1: TComboBox; DataSource1: TDataSource; // 其他声明的组件和数据源 procedure DBGrid1CellClick(Column: TColumn); procedure ComboBox1Change(Sender: TObject); private { Private declarations } procedure ShowComboBox; procedure HideComboBox; procedure FillComboBox(AColumn: TColumn); procedure UpdateDBGridValue(AColumn: TColumn); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if Column.Field.DataType = ftString then begin FillComboBox(Column); ShowComboBox; end; end; procedure TForm1.ComboBox1Change(Sender: TObject); begin UpdateDBGridValue(DBGrid1.SelectedField as TColumn); HideComboBox; end; procedure TForm1.ShowComboBox; begin ComboBox1.Visible := True; ComboBox1.SetBounds(DBGrid1.Left + DBGrid1.Columns[DBGrid1.SelectedIndex].Width + 1, DBGrid1.Top + DBGrid1.RowHeights[0] * (DBGrid1.SelectedField.Index + 1), DBGrid1.Columns[DBGrid1.SelectedIndex].Width, DBGrid1.RowHeights[0]); ComboBox1.BringToFront; end; procedure TForm1.HideComboBox; begin ComboBox1.Visible := False; end; procedure TForm1.FillComboBox(AColumn: TColumn); var i: Integer; begin ComboBox1.Clear; // 根据数据源填充ComboBox内容 if AColumn.Field.DataSet.Active then begin AColumn.Field.DataSet.First; while not AColumn.Field.DataSet.Eof do begin ComboBox1.Items.Add(AColumn.Field.AsString); AColumn.Field.DataSet.Next; end; end; end; procedure TForm1.UpdateDBGridValue(AColumn: TColumn); begin if (AColumn.Field.DataType = ftString) and (DBGrid1.SelectedField = AColumn) then begin AColumn.Field.Value := ComboBox1.Text; end; end; end. ``` 需要注意的是,这只是一个简单的示例代码,实际还涉及更多的细节和逻辑处理。通过以上方法,我们就可以在Delphi实现DBGrid的下拉选择功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值