我有这个数据表
+----+---+---+---+
| id | s | m | l |
+----+---+---+---+
| 1 | 2 | 3 | |
+----+---+---+---+
| 2 | | 3 | 4 |
+----+---+---+---+
s, m, l
代表T恤尺寸,值是数量。我必须id = 1
仅对具有值的大小列显示一行(比方说)。因此,对于我的行,我将仅显示s和m列。有没有一种方法可以只删除我需要的列的数据表?
一个DataTable
包含通常在多个DataRows
,但只有一个DataColumnCollection
。因此,您可以删除没有至少一个带有值的行的所有列。
然后,您需要DataTable
仅使用“已填充”列来创建一个新的。以下方法不仅适用于单个方法,DataRow
而且适用于多个方法:
var rows = dataTable.AsEnumerable()
.Where(row => row.Field<int>("ID") == id); // a LINQ query
var columnsWithoutValues = dataTable.Columns.Cast<DataColumn>()
.Where(col => rows.All(r => r.IsNull(col))); // columns without values
DataTable tblResult = dataTable.Clone(); // same columns no data
foreach (DataColumn colToRemove in columnsWithoutValues)
tblResult.Columns.Remove(colToRemove.ColumnName); // remove columns without data
tblResult.BeginLoadData(); // disable constraints temporarily
foreach (DataRow row in rows)
{
DataRow newRow = tblResult.Rows.Add();
foreach (DataColumn col in tblResult.Columns)
newRow[col] = row[col.ColumnName];
}
tblResult.EndLoadData();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句