【问题标题】:Get selected Row/Columns Count without Setting Selection Mode在不设置选择模式的情况下获取选定的行/列数
【发布时间】:2014-05-30 15:58:59
【问题描述】:

我有一个 DataGridView,我希望提供将选定的行和列导出到 excel 的功能

但是,我选择的行数总是为零,所以我做到了

 dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

现在,我无法选择个别列,每当我选择任何行时,它都会选择所有列作为整行选择

列也是如此 如果我这样做了

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullColumnSelect;

它选择整个列。

如果我不做这个选择模式,那么

dataGridView1.SelectedRows.Count & dataGridView1.SelectedColumns.Count 

总是返回零。

我怎样才能在图像中制作类似的东西?

【问题讨论】:

    标签: c# datagridview


    【解决方案1】:

    获取所选行的方法如下:

    var selectedRows =
        this.dataGridView1.SelectedCells.Cast<DataGridViewCell>()
            .Select(cell => cell.OwningRow)
            .Distinct()
            .OrderBy(row => row.Index);
    

    您可以调用Count 来获取计数,但不是枚举两次,而是调用ToArray 然后获取数组的Length

    【讨论】:

    • 谢谢@jmcilhinney,这正是我想要的。我不知道存在诸如 OwningRow 或 OwningColumn 之类的东西
    • 我怎样才能得到那些没有被选中的。我可以一一迭代所有列并检查它们是否在这个 SelectedRow 索引集合中,但是有一种更快、更简单的方法。
    • 在我脑海中浮现:var unselectedRows = this.dataGridView1.Rows.Cast&lt;DataGridViewRows&gt;().Except(selectedRows);
    • @jmcilhinney 你打电话给Count是什么意思?你会怎么做?
    • @LV98,我提供的代码调用CastSelectDistinctOrderBy 以按顺序获取行列表。如果您只想要这些行的计数,那么您只需在最后链接到Count 的调用。如果您想要行数和计数,请改为链接到 ToArray 的调用,这将返回一个数组。您可以像使用任何其他数组一样使用它。我不需要教你如何调用方法。
    猜你喜欢
    • 2015-07-31
    • 2016-09-07
    • 2012-01-19
    • 2014-07-19
    • 2012-05-27
    • 1970-01-01
    • 2015-10-27
    相关资源
    最近更新 更多