基于DGV选中行数据自动填充文本框的实现问题
解决方案
你已经用BindingSource作为绑定中间层,有两种方案可以实现点击行同步填充文本框的需求,优先推荐第一种,完全不需要额外写事件代码:
方案一:文本框绑定到同一BindingSource(推荐)
你之前把文本框直接绑到DataSet的Tool表才会导致无法同步,只要把所有要联动的文本框的数据源统一指向你创建的SBind实例即可:
- 打开文本框的属性面板,找到「数据」分类下的
(DataBindings),展开后点击Text属性右侧的下拉按钮 - 依次选择「其他数据源」→「项目数据源」→ 选中你定义的
SBind实例(不要直接选DataSet下的Tool表),再选择对应要绑定的列名即可
绑定完成后,点击DataGridView任意行时,BindingSource的当前选中项会自动同步,所有绑定的文本框会自动刷新对应值。
方案二:手动监听点击事件赋值
如果需要自己控制赋值逻辑,给DataGridView添加CellClick事件,代码如下:
注意:需要把你代码里定义的
SBind从局部变量改成窗体的类级别字段,否则事件里无法访问。
private void toolDataGridView_CellClick(object sender, DataGridViewCellEventArgs e) { // 跳过点击表头的情况 if(e.RowIndex < 0) return; // 从绑定源获取当前选中行数据 if(SBind.Current is DataRowView currentRow) { ToolDataSet.ToolRow toolRow = (ToolDataSet.ToolRow)currentRow.Row; // 按照需求给对应文本框赋值即可,示例如下: description_Textbox.Text = toolRow.Description; vendor_Textbox.Text = toolRow.Vendor; cost_Textbox.Text = toolRow.Cost.ToString("F2"); serial_Textbox.Text = toolRow["Serial #"].ToString(); // 剩余字段按照上面的格式补全即可 } }
内容的提问来源于stack exchange,提问作者Joe Fisher
相关产品推荐
相关产品推荐

