C#DataGridView,显示仅包含数据的列

时间:2014-09-09 11:07:42

标签: c# datagridview

我正在使用datagridview使用linq镜像我的sql表:

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

这很好用。

但是我的sql表有60列,其中只有少数几个包含数据,所有包含数据的时候都很少。

那么我怎样才能在datagridview中只显示包含数据的列?

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

最简单的方法是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

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

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;
}