如何在未选中行且不使用FullSelectedRow模式时获取DataGridView首个单元格值?
解决DataGridView非FullRowSelect模式下获取第一个单元格值的问题
这个问题我之前也碰到过!你遇到的System.ArgumentOutOfRangeException其实很好理解——当DataGridView没开FullRowSelect模式时,用户选中的是单个/多个单元格,而非整行,所以SelectedRows集合根本是空的,直接访问SelectedRows[0]当然会索引越界啦。
下面给你两种可行的解决方案,按需选择:
方案1:直接获取第一个选中的单元格值
既然选中的是单元格,那就直接用SelectedCells集合来访问,记得先做空判断避免报错:
// 先检查是否有选中的单元格 if (AppointmentGrid.SelectedCells.Count > 0) { // 获取第一个选中单元格的值,处理null情况 string cellText = AppointmentGrid.SelectedCells[0].Value?.ToString() ?? "该单元格为空"; MessageBox.Show(cellText); } else { MessageBox.Show("请先选中一个单元格哦"); }
方案2:获取选中单元格所在行的第一列值
如果你实际需求是拿到选中单元格所在行的第一列数据(而不是选中的那个单元格),可以这样写:
if (AppointmentGrid.SelectedCells.Count > 0) { // 获取选中单元格所属的行 DataGridViewRow selectedRow = AppointmentGrid.SelectedCells[0].OwningRow; // 获取该行第一列的单元格值 string firstCellText = selectedRow.Cells[0].Value?.ToString() ?? "该单元格为空"; MessageBox.Show(firstCellText); } else { MessageBox.Show("请先选中一个单元格哦"); }
小提醒
不管用哪种方案,一定要先判断集合的Count是否大于0,这能帮你避开大部分索引越界和空引用的坑!
内容的提问来源于stack exchange,提问作者Dim Chris
相关产品推荐
相关产品推荐

