【问题标题】:how to get index of the last selected row from a selection of rows in a DataGridView如何从 DataGridView 中的选定行中获取最后选定行的索引
【发布时间】:2011-05-25 11:57:50
【问题描述】:

我有一个 DataGridView,当我选择多行时,我想要最后一个选定行的索引。换句话说,如何从选择的行中获取最大索引。

例如,如果我选择 row0、row1 和 row6,我希望输出为“6”。

问候。

【问题讨论】:

  • 我会查看选择的内容,获取最后选择的行并检索它的索引。根据您迄今为止提供的内容,这是最好的答案。
  • @Lazarus,但是如何做到这一切。这背后的逻辑很简单。我正在寻找代码来查看语法,看看它是如何完成的:(
  • @Henk Holterman,随便吧。假设我有一个按钮,点击它应该在消息框中显示“6”(如果我按照我在问题中的解释选择了行)
  • @nawfal,你没抓住重点。 “根据你迄今为止提供的内容......”你问了一个模糊的问题,得到了一个模糊的答案。你尝试过什么,它是如何失败的?这不是免费的编程资源商店。
  • @nawfa 你的问题和标签应该是 WinForms, WebForms, WPF, ...

标签: c# winforms datagridview .net-2.0


【解决方案1】:
if (dataGridView1.SelectedRows.Count > 0)
{
    int lastIndex = dataGridView1.SelectedRows[dataGridView1.SelectedRows.Count - 1].Index;
}

【讨论】:

  • @nawfal 我忘记了最后的.Index。现已修复。
  • @Bala R,再次抱歉,我得到了这个例外。 Index was out of range. Must be non-negative and less than the size of the collection.
  • @Bala R,我发现了这个错误,但你的代码似乎没有像我想象的那样给出输出。尽管如此,稍微调整一下就会产生完美的答案。谢谢:)
  • @Bala R,您的技术问题基本上是输出取决于选择行/单元格的顺序。我的意思是只有自下而上的选择才能产生完美的答案。
【解决方案2】:
var x = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Max(row => row.Index);

等同于:

var y = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Last().Index;

【讨论】:

  • .net 2.0 中会是什么??
  • @nawfal:这是 LINQ,只能在 3.5 或 4.0 中访问。使用@Bala 的常规代码
【解决方案3】:

抱歉,我正在为自己添加答案。可能还有其他更快的方法,但这是可行的。

            List<int> lst = new List<int>();
            foreach (DataGridViewRow row in dg.SelectedRows)
                lst.Add(row.Index);

            lst.Sort();
            int i = lst[lst.Count - 1];

这样做是将所有选定行的索引添加到List&lt;&gt;,然后进行排序,然后给出排序后的List&lt;&gt;中的最后一项。

注意:Bala R 方法的问题在于,它取决于选择行的顺序(即选择的指针所在的位置)。 It fails when selected rows aren't in an order.它给出了最后选择的行,不一定是一组行中的最大索引。

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2023-04-07
    • 2011-04-14
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多