当前位置: 首页 > 编程语言 > C#

获取DataGridView中选中行的单元格内容

时间:2023-04-10 18:18:21 C#

获取DataGridView中选中行的单元格内容我有一个从数据库填充的DataGridView。我正在尝试获取在RowEnter事件中选择的行的内容。我已将网格的选择模式设置为FullRowSelect我已尝试以下操作:intorderId=(int)dgUnprocessedCards.Rows[dgUnprocessedCards.SelectedCells[0].RowIndex].Cells[0].Value;这会不断抛出错误的索引超出范围。必须为非负数且小于集合的大小。任何帮助表示赞赏。我刚刚在一个示例datagridview应用程序中尝试了这个,它运行良好,所以一定有什么你没有告诉我们的。要做的第一件事是将一个大语句分解成离散的小语句,这样您就可以准确地看到它失败的地方。您可以将上面的代码重写为这样的代码以进行调试:varcellindex=dgUnprocessedCards.SelectedCells[0].RowIndex;varcellcollection=dgUnprocessedCards.Rows[cellindex].Cells[0];intorderId=(int)dgUnprocessedCards.Value;此外,您应该能够执行以下操作以实现您的目标:intorderId=(int)dataGridView1.SelectedRows[0].Cells[0].Value;这里使用的是SelectedRows集合,更简洁一些,我想说更常见的方式是从datagridview中访问选中的项。最后,您可能希望检查值的转换,因为值不一定是int。类似于:intorderid;if(!int.TryParse(cellcollection.Value.ToString(),outorderid)){//处理Value不是int的事实的一些逻辑}SelectionChanged事件何时触发?现在-正如您所提到的,当数据加载到网格中时,您的选择会更改事件。这似乎不会导致我的测试版本出现问题,但它可能是您问题的一部分。为什么会发生这种情况不应与您使用的数据源类型有关,而与您附加事件处理程序以进行选择更改有关。这是因为数据绑定会引发选择更改事件。如果您为DataBindingComplete事件添加一个事件处理程序并在其中附加一个SelectionChanged或RowEnter事件处理程序,您应该看不到在数据绑定期间调用的处理程序。voiddataGridView1_DataBindingComplete(objectsender,DataGridViewBindingCompleteEventArgse){this.dataGridView1.RowEnter+=newSystem.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_RowEnter);this.dataGridView1.SelectionChanged+=newSystem.Sel.GridView}Changed(this)请注意,您需要删除设计器生成的事件附件并引用设计器生成的方法才能使其工作。这也有效:intorderId=(int)dgUnprocessedCards.SelectedCells[0].OwningRow.Cells[0].Value;我正在尝试做的工作正常,但绑定正在调用选择更改事件。所以我按照DavidHall的建议做了(附加和分离事件),我也把它放在一个trycatch块中,现在它完美地工作了。以上就是C#学习教程:获取DataGridView中选中行的单元格内容共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: