我有这个DataTable
+----+---+---+---+
| id | s | m | l |
+----+---+---+---+
| 1 | 2 | 3 | |
+----+---+---+---+
| 2 | | 3 | 4 |
+----+---+---+---+
s, m, l
代表T恤尺码,价值是数量。我必须显示单行(假设id = 1
)只显示具有值的大小列。所以,对于我的行,我只会显示列s和m。有没有办法只将数据表从我需要的列中删除?
答案 0 :(得分:1)
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();