我有DataTable
(dataTable1),有25-30列。我想通过创建一个小的DataTable(dataTable2)绑定一个DataGridView
,该DataTable将具有来自现有DataTable的几列(可能是5-10)。
所以我的主要任务是创建一个DataTable
,其中包含较少的列。
以下是我为此尝试过的代码..
DataTable subDataTable()
{
DataTable smallTable=new DataTable();
smallTable =dataTable1;// dataTable1 is already filled with data
smallTable.Columns.Remove("Column2");
smallTable.Columns.Remove("Column5");
smallTable.Columns.Remove("Column6");
smallTable.Columns.Remove("Column13");
smallTable.Columns.Remove("Column16");
return smallTable;
}
工作正常。但我在寻找是否有更好的方法。
答案 0 :(得分:1)
您可以尝试使用linq将DataTable
转换为IEnumerable
和Select
个必填字段,如下所示:
var myValues = dataTable1.AsEnumerable()
.Select(x => new { col1 = x["Column1"], col2 = x["Column2"]..});
dataGridView.DataSource = myValues;
答案 1 :(得分:1)
您的代码无法正常运行,因为您所做的只是参考smallTable
分配变量dataTable1
,并从原始表格对象中删除列
Linq的写作速度更快,但这是您想要了解的问题:
DataTable smallTable = dataTable1.Clone(); // Copy data structure
// Now you can remove your columns
smallTable.Columns.Remove("Column2");
......
foreach (var row in dataTable1.Rows) // iterate all rows
{
var newRow = smallTable.NewRow();
foreach (var col in smallTable.Columns) // and iterate only needed columns
{
newRow[col.ColumnName] = row[col.ColumnName];
}
}
这几乎是Linq的糖衣。
答案 2 :(得分:0)
DataView dv = new DataView(dataTable1);
DataTable smallTable = dv.ToTable(true, new string[] { "Column2", "Column5"...});
托梅尔。