Reputation: 324
In my application, there is need to convert my data grid to datatable, I am passing data table and data grid by reference. here's my function.
public static void ConvertGridToTable(ref Datatable dt, ref Gridview grd)
Upvotes: 0
Views: 4235
Reputation: 116
you can also do like this:-
var dataTable = new DataTable();
Array.ForEach(
dataGridView1.Columns.Cast<DataGridViewColumn>().ToArray(),
arg => dataTable.Columns.Add(arg.HeaderText, arg.ValueType));
Array.ForEach(
dataGridView1.Rows.Cast<DataGridViewRow>().ToArray(),
arg => dataTable.Rows.Add(arg.Cells.Cast<DataGridViewCell>().Select(cell => cell.Value)));
return dataTable;
Upvotes: 0
Reputation: 112
public static void ConvertGridToTable(ref DataTable dt, ref GridView grd)
{
try
{
if (grd.Rows.Count <= 0) return;
for (int i = 0; i <= grd.Columns.Count - 1; i++)
{
if (grd.Columns[i].GetType().Name.Equals("BoundField"))
{
BoundField bf = (BoundField)grd.Columns[i];
dt.Columns.Add(bf.DataField.ToString());
}
}
for (int i = 0; i <= grd.Rows.Count - 1; i++)
{
dt.Rows.Add();
for (int j = 0; j <= grd.Columns.Count - 1; j++)
{
if (grd.Columns[j].GetType().Name.Equals("BoundField"))
{
BoundField bf = (BoundField)grd.Columns[j];
for (int k = 0; k <= dt.Columns.Count - 1; k++)
{
if (dt.Columns[k].ColumnName.Trim().Equals(bf.DataField.ToString()))
{
string value = grd.Rows[i].Cells[j].Text.Trim().Contains(" ") ? grd.Rows[i].Cells[j].Text.Trim().Replace(" ", string.Empty) : grd.Rows[i].Cells[j].Text.Trim();
dt.Rows[i][bf.DataField.ToString()] = value;
}
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
Upvotes: 2