【问题标题】:How to count not-empty rows of each column in one datagridview and show numbers of rows in the second datagridview?如何计算一个datagridview中每一列的非空行并在第二个datagridview中显示行数?
【发布时间】:2019-05-27 08:27:00
【问题描述】:

我有 2 个数据网格视图:

1 - 显示来自数据库的数据。

2 - 必须在第一个 datagridview 中显示每列的非空行数。

我试过这段代码,但它计算每一行:

     var count = dataGridView1.Rows.Cast<DataGridViewRow>().Where(row => !(row.Cells[0].Value == null || row.Cells[0].Value == DBNull.Value)).Count();

第二个 datagridview 必须显示不同的非空行。

请帮忙解决这个问题。

感谢您的帮助。

【问题讨论】:

  • DGV 的来源是什么?如果是数据表,使用数据表会更容易。
  • 这是一个数据表。

标签: c# database datagridview oledb


【解决方案1】:

尝试以下:

            var count = Enumerable.Range(0, dataGridView1.Columns.Count) 
                .Select(x => new { column = x, count = dataGridView1.Rows.Cast<DataGridViewRow>().Where(row => !(row.Cells[x].Value == null || row.Cells[x].Value == DBNull.Value)).Count() })
                .ToList();

使用数据表

            var count1 = Enumerable.Range(0, dt.Columns.Count)
                .Select(x => new { column = x, count = dt.AsEnumerable().Where(row => row[x] != DBNull.Value).Count() })
                .ToList();

使用结果创建数据表

            var count1 = Enumerable.Range(0, dt.Columns.Count)
                .Select(x => new { column = x, count = dt.AsEnumerable().Where(row => row[x] != DBNull.Value).Count() })
                .ToList();

            DataTable dt2 = new DataTable();
            dt2.Columns.Add("Column Name", typeof(string));
            dt2.Columns.Add("Count", typeof(int));

            foreach (var count in count1)
            {
                dt2.Rows.Add(new object[] { dt.Columns[count.column].ColumnName, count.count }); 
            }

【讨论】:

  • 此代码是否计算每一行?如果我想用值计算唯一/不同的行?
  • 是的,它首先枚举列,然后是行。
  • 你知道如何在另一个datagridview中显示计数吗?
  • 我更新了代码并将结果放入一个数据表中,该数据表可以作为第二个 DGV 的数据源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多