我正在使用datagridview使用linq镜像我的sql表:
var listOfCarRecords = dataGridView1.DataSource = record.Select(x => Mapper.Map<Cars>(x)).ToList();
这很好用。
但是我的sql表有60列,其中只有少数几个包含数据,所有包含数据的时候都很少。
那么我怎样才能在datagridview中只显示包含数据的列?
我尝试设置autogeneratecolumns = false
,但它不起作用。
最简单的方法是什么?
谢谢
答案 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;
}