C# 将DataGrid转换为DataTable
在.NET中将我的C# 将DataGrid转换为DataTable,c#,.net,asp.net-mvc,datatable,datagrid,C#,.net,Asp.net Mvc,Datatable,Datagrid,在.NET中将我的DataGrid转换为DataTable(DataGrid.ItemsSource在.NET csharp中没有定义)的等价物是什么 谢谢 DataTable dt = new DataTable(); dt = ((DataView)DataGrid1.ItemsSource).ToTable(); 编辑 这不是重复的代码,因为前面的代码是针对WPF的,我正在寻找asp.net mvc csharp答案。项目资源是针对WPF的。使用数据源并将其转换为数据表,如下所示: dt
DataGrid
转换为DataTable
(DataGrid.ItemsSource
在.NET csharp中没有定义)的等价物是什么
谢谢
DataTable dt = new DataTable();
dt = ((DataView)DataGrid1.ItemsSource).ToTable();
编辑
这不是重复的代码,因为前面的代码是针对WPF的,我正在寻找asp.net mvc csharp答案。项目资源是针对WPF的。
使用数据源
并将其转换为数据表
,如下所示:
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;
}
编辑:如果您在上述方法中遇到问题,您可以使用如下自定义方法:
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;
}
另外,如果数据源的类型是列表,那么MoreLinq
也是一个不错的选择。检查此解决方案以了解如何使用它:如果您指的是系统.Windows.Forms.DataGrid
或系统.Web.UI.WebControls.DataGrid
,那么最好的方法是将数据源
属性强制转换为a数据表
当然,Datasource
属性首先必须是DataTable
基础类型。您需要知道存储在Datasource
属性中的对象的基础类型
如果Datasource
的底层类型是一个通用列表,那么这篇SO文章应该有帮助:
仅供参考-如果DataGridView中有可见列可供使用,则Windows窗体DataGrid
控件已替换为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;
}
私有数据表到数据表(DataGridView DataGridView)
{
var dt=新数据表();
int columnCount=0;
List ColumnNumber=新列表();
foreach(dataGridView.Columns中的DataGridViewColumn DataGridViewColumn)
{
if(dataGridViewColumn.Visible)
{
dt.Columns.Add(dataGridViewColumn.Name);
ColumnNumber.Add(columnCount);
}
columnCount++;
}
var cell=新对象[ColumnNumber.Count];
foreach(dataGridView.Rows中的DataGridViewRow DataGridViewRow)
{
int i=0;
foreach(列号中的int a)
{
单元格[i]=dataGridViewRow.Cells[a].值;
i++;
}
dt.Rows.Add(单元格);
}
返回dt;
}
自定义方法不考虑隐藏列。您将收到一个错误,因为复制的列的单元格太多
您可以使用:
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
}
int-dgv1RowCount=dgv1.Rows.Count;
int numOfColumns=dgv1.Columns.GetColumnCount(dataGridViewElementState.Visible);
int numCells=dgv1RowCount*numfocolumns;
//在for循环中使用numCells
对于(int i=0;i
可能重复@ArricryStringOfLetters No.重复帖子的代码与OP的代码相同,因为他/她提到了DataGrid.ItemsSource
没有定义,所以他/她肯定不是在寻找WPF解决方案。我试过了,我得到了这个错误:无法强制转换'System.Collections.Generic.List'in type'System.Data.DataTable'@J.Lavoie-见我的answer@J.Lavoie好的。检查我更新的答案。我提供了另一种方法来实现这一点。我需要什么来使用DataGridView?Intellisense找不到我one@bnem好的。我知道。顺便说一句,MVC不包含任何名为DataGrid
的助手。我指的是System.Web.UI.WebControls.DataGrid
@J。Lavoie yes看到您的编辑并更新了我的答案,添加了将列表转换为Datatable的链接我在强制转换时出错,但可能是因为存储的对象的基本类型是类对象!@J.Lavoie在您对另一个答案的评论中,您出现了一个错误,因为您试图将通用列表转换为Datatable
。请使用t我在回答中提供了链接。好吧,除了我的日期时间值转换成十进制外,这一切都很好!