.NET中将DataGrid
转换为DataTable
(DataGrid.ItemsSource
的等价物在.Net csharp中未定义。
谢谢!
DataTable dt = new DataTable();
dt = ((DataView)DataGrid1.ItemsSource).ToTable();
修改
这不是重复,因为前面的代码是针对WPF的,我正在寻找一个asp.net mvc csharp的答案。
答案 0 :(得分:2)
ItemsSource
适用于WPF。使用DataSource
并将其转换为DataTable
,如下所示:
dt = (DataTable)DataGrid1.DataSource;
编辑:如果您遇到上述方法的问题,可以使用这样的自定义方法:
private DataTable ToDataTable(DataGridView dataGridView)
{
var dt = new DataTable();
foreach (DataGridViewColumn dataGridViewColumn in dataGridView.Columns)
{
if (dataGridViewColumn.Visible)
{
dt.Columns.Add();
}
}
var cell = new object[dataGridView.Columns.Count];
foreach (DataGridViewRow dataGridViewRow in dataGridView.Rows)
{
for (int i = 0; i < dataGridViewRow.Cells.Count; i++)
{
cell[i] = dataGridViewRow.Cells[i].Value;
}
dt.Rows.Add(cell);
}
return dt;
}
然后使用它:
var dataTable = ToDataTable(dataGridView1);
如果MoreLinq
的类型是列表,Datasource
也是一个不错的选择。检查此解决方案以了解如何使用它:https://stackoverflow.com/a/42550827/2946329
答案 1 :(得分:1)
如果您指的是System.Windows.Forms.DataGrid
或System.Web.UI.WebControls.DataGrid
,那么最好的方法是将Datasource
属性转换为DataTable
。
当然,Datasource
属性实际上必须是DataTable
基础类型才能开始。您需要知道Datasource
属性中存储的对象的基础类型。
如果Datasource
的基础类型是通用列表,则此SO帖子应该有所帮助:How to convert a list into data table
仅供参考 - Windows窗体DataGrid
控件according to Microsoft已被DataGridView
取代。
答案 2 :(得分:0)
如果datagridview中有可见的列,您可以使用
private DataTable ToDataTable(DataGridView dataGridView)
{
var dt = new DataTable();
int columnCount = 0;
List<int> columnNumbers= new List<int>();
foreach (DataGridViewColumn dataGridViewColumn in dataGridView.Columns)
{
if (dataGridViewColumn.Visible)
{
dt.Columns.Add(dataGridViewColumn.Name);
columnNumbers.Add(columnCount);
}
columnCount++;
}
var cell = new object[columnNumbers.Count];
foreach (DataGridViewRow dataGridViewRow in dataGridView.Rows)
{
int i = 0;
foreach (int a in columnNumbers)
{
cell[i] = dataGridViewRow.Cells[a].Value;
i++;
}
dt.Rows.Add(cell);
}
return dt;
}
答案 3 :(得分:0)
自定义方法未考虑隐藏的列。您收到一个错误消息,因为您复制的列的单元格过多。
您可以使用:
int dgv1RowCount = dgv1.Rows.Count;
int numOfColumns = dgv1.Columns.GetColumnCount(DataGridViewElementStates.Visible) ;
int numCells = dgv1RowCount * numOfColumns;
// use numCells in the for loop
for (int i = 0; i < numOfCells ; i++)
{
enter code here
}