如何获取DataGridView选中行的ID并显示到TextBox?当前代码存在异常
解决DataGridView选中行ID始终显示第一行的问题
问题根源
你当前使用SelectedCells[0]的逻辑存在缺陷:若DataGridView的选择模式为整行选中(FullRowSelect),SelectedCells集合的第一个元素未必属于当前选中行;或是代码仅在初始化时执行一次,没有绑定到行选择变化的事件上,导致始终读取初始选中的第一行数据。
正确实现方案
方案1:通过选中行集合获取(推荐)
直接从SelectedRows集合提取当前选中行的ID值,适用于整行选中的场景(默认SelectionMode为RowHeaderSelect或FullRowSelect):
// 先判断是否存在选中行,避免空引用异常 if (dgv_search.SelectedRows.Count > 0) { // 替换"ID"为你的DataGridView中ID列的实际列名,也可用列索引如Cells[0] tb_id.Text = dgv_search.SelectedRows[0].Cells["ID"].Value.ToString(); }
方案2:通过当前单元格所属行获取
如果是单元格选择模式,确保读取的是当前选中单元格所在行的ID:
if (dgv_search.CurrentCell != null) { tb_id.Text = dgv_search.CurrentCell.OwningRow.Cells["ID"].Value.ToString(); }
关键注意点
必须将代码绑定到DataGridView.SelectionChanged事件上,这样每次选中行变化时都会自动更新TextBox内容:
// 在窗体构造函数或Load事件中绑定事件 public YourForm() { InitializeComponent(); dgv_search.SelectionChanged += Dgv_Search_SelectionChanged; } // 事件处理方法 private void Dgv_Search_SelectionChanged(object sender, EventArgs e) { if (dgv_search.SelectedRows.Count > 0) { tb_id.Text = dgv_search.SelectedRows[0].Cells["ID"].Value.ToString(); } }
不要仅在窗体初始化时执行一次赋值操作,否则只会读取初始选中的第一行,无法随选择变化更新。
内容的提问来源于stack exchange,提问作者Salem Gogah
相关产品推荐
相关产品推荐

