【问题标题】:Exclude last column of a DataGridView from selection从选择中排除 DataGridView 的最后一列
【发布时间】:2016-07-14 16:47:16
【问题描述】:

我正在尝试获取DataGridView 的所有列名称的列表,除了最后一个。

以下返回所有列:

var columnsList = datagridview.Columns
            .Cast<DataGridViewColumn>()
            .Select(c => c.Name);

我尝试使用Except 来删除返回值的最后一列:

 var columnsList = datagridview.Columns
            .Cast<DataGridViewColumn>()
            .Select(c => c.Name)
            .Except((datagridview.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.Visible).Name));

我收到一个错误,指出 IEnumerable&lt;string&gt; 不包含 Except 的定义。

如何实现?

【问题讨论】:

    标签: c# winforms linq datagridview


    【解决方案1】:

    您可以通过 taking 仅排除最后一列 n-1 列:

    var columnsList = datagridview.Columns
                                  .Cast<DataGridViewColumn>()
                                  .Take(datagridview.Columns.Count-1)
                                  .Select(c => c.Name);
    

    【讨论】:

      【解决方案2】:

      Except 需要一个集合作为输入参数。这是一个集合操作:set1 减去 set2。所以技术上,应该是

      var lastColumn = datagridview.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.Visible).Name;
      var columnsList = datagridview.Columns
                  .Cast<DataGridViewColumn>()
                  .Select(c => c.Name)
                  .Except(new[] { lastColumn });
      

      当然,正如已经回答的那样,使用Take(n-1) 要容易得多,其中n 是列数。

      【讨论】:

      • 感谢您提供语法。确实,Take 非常优雅。
      【解决方案3】:

      获取 DataGridView 的所有列名的列表,除了最后一个 = 先取datagridview.Columns.Count - 1

      因为Columns 有一个索引器并且只实现IEnumerable(非通用)我会在这里使用Enumerable.Range

      var names = Enumerable.Range(0, datagridview.Columns.Count - 1)
                            .Select(idx => datagridview.Columns[idx].Name);
      

      【讨论】:

      • 谢谢,也非常好的解决方案。
      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多