C#DataGridView,显示只有数据的列

本文关键字:数据 显示 C#DataGridView | 更新日期: 2023-09-27 18:21:22

我正在使用datagridview来使用linq镜像我的sql表,所以:

var listOfCarRecords = dataGridView1.DataSource = record.Select(x => Mapper.Map<Cars>(x)).ToList();

这很好用。

然而,我的sql表有60列,其中只有少数列包含数据,很少有所有列都包含数据的情况。

那么,如何在数据网格视图中只显示包含数据的列呢?

我尝试设置autogeneratecolumns = false,但它不起作用。

请问最简单的方法是什么?

感谢

C#DataGridView,显示只有数据的列

在将Datatable指定为数据源之前,可以删除具有null值的列。

if (table.AsEnumerable().All(dr => dr.IsNull("ColumnName"))) // column name having null values
   table.Columns.Remove("ColumnName");

然后将其分配给您的dataGridview

datagridview1.DataSource = table;

编辑:

DataTable dataTable = record.Select(...) // Your data coming from DB
// Remove Empty Columns
if (dataTable.AsEnumerable().All(dr => dr.IsNull("ColumnName"))) // column name having null values
   dataTable.Columns.Remove("ColumnName");

List<Cars> listOfCarRecords = dataTable.ToCollection<Cars>;
dataGridView1.DataSource = listOfCarRecords;

// ToCollection is an extension methods for converting generic class to List
public static List<T> ToCollection<T>(this DataTable sourceDatatable)
{
    var lst = new List<T>();
    Type tClass = typeof(T);
    PropertyInfo[] pClass = tClass.GetProperties();
    List<DataColumn> dc = sourceDatatable.Columns.Cast<DataColumn>().ToList();
   foreach (DataRow item in sourceDatatable.Rows)
   {
     var genericObject = (T)Activator.CreateInstance(tClass);
     foreach (PropertyInfo pc in pClass)
     {
        DataColumn d = dc.Find(c => c.ColumnName == pc.Name);
        if (d != null)
           pc.SetValue(genericObject, item[pc.Name], null);
     }
     lst.Add(genericObject);
  }
  return lst;
}