DataGridView行值传递至TextEdit1失败,请求代码调试帮助
排查DataGridView双击传值到TextEdit的问题
我来帮你梳理这个问题的排查方向和修复方案,先看几个关键的踩坑点:
1. 控件名称不匹配(最容易忽略的细节)
你填充DataGridView用的是GVhkCL.ItemsSource = dt;,但双击事件里写的是DataGridViewEmployee.GetSelectedRows()——这两个控件名称明显不一致!如果这是同一个DataGridView的话,肯定会导致找不到选中行,直接把事件里的DataGridViewEmployee改成GVhkCL就行。
2. SQL查询缺少目标列(核心错误)
你的双击事件里试图获取"ID"列的值,但填充DataGridView的SQL查询里根本没选ID字段!看这段SQL:
SELECT Room_No as 'Room No',Room_Status as 'Room Status', S_Time as 'Start Time',E_Time as 'End Time',c_date as 'Create Date'from HK_Chk
完全没有ID列,GetRowCellValue自然拿不到值,甚至会抛出异常。必须在SELECT语句里加上ID字段,比如:
SELECT ID, Room_No as 'Room No',Room_Status as 'Room Status', S_Time as 'Start Time',E_Time as 'End Time',c_date as 'Create Date'from HK_Chk
3. 未判断选中行是否为空
如果用户双击时没有选中任何行,selectedRowHandles会是空数组,直接取selectedRowHandles[0]会触发索引越界异常。必须先判断数组长度。
修正后的完整代码示例
填充DataGridView的方法(优化连接管理+补充ID列)
private void Bind_GVhkCL(string text) { string query = "SELECT ID, Room_No as 'Room No',Room_Status as 'Room Status', S_Time as 'Start Time',E_Time as 'End Time',c_date as 'Create Date' from HK_Chk " + text; // 使用using自动释放连接,避免手动关闭遗漏 using(var sqlConnection = new SqlConnection(你的连接字符串)) { sqlConnection.Open(); SqlDataAdapter da = new SqlDataAdapter(query, sqlConnection); DataTable dt = new DataTable(); da.Fill(dt); GVhkCL.ItemsSource = dt; } }
双击事件(修正控件名+空判断+安全取值)
private void GVhkCL_DoubleTap(object sender, DataGridGestureEventArgs e) { int[] selectedRowHandles = GVhkCL.GetSelectedRows(); // 先检查是否有选中行 if(selectedRowHandles.Length == 0) { MessageBox.Show("请先选择一行数据"); return; } // 安全获取单元格值,避免null报错 object idValue = GVhkCL.GetRowCellValue(selectedRowHandles[0], "ID"); TextEdit1.Text = idValue != null ? idValue.ToString() : string.Empty; }
额外排查步骤
- 确认事件绑定:在设计器里选中
GVhkCL,打开事件面板,确保DoubleTap事件已经绑定到GVhkCL_DoubleTap方法,不然代码根本不会执行。 - 调试验证:给双击事件加个断点,运行后双击DataGridView,查看
selectedRowHandles是否有值,idValue是否能正常获取,快速定位问题。
内容的提问来源于stack exchange,提问作者Nadeem Ahmed
相关产品推荐
相关产品推荐

