条件DataGridView到DataTable的转换

时间:2012-09-03 04:39:30

标签: c# datagridview datagrid datatable

我有一个看起来像这样的DataGridView:

                  DGV 
       | Col 1 | Col 2 | Col 3 |

我想知道在写入数据表时是否可以删除第一列,以便它看起来像这样:

             DataTable
        | Col 2 | Col 3 |

此外,是否可以消除包含特定值的行?因此,如果值在datagridview中,我想从我的数据表中删除它。 例如。

                  DGV 
       | Col 1 | Col 2 | Col 3 |
       | Value | One   | Two   |
       | Value | Three | Two   |
       | Value | Four  | Two   |

因此,如果DataGridView中的值为“Three”,则DataTable将为

             DataTable
        | Col 2 | Col 3 |
        | One   | Two   |
        | Four  | Two   |

任何帮助将不胜感激!我已经尝试逐行解析,但我想知道是否有更有效的方法来实现这一点。

2 个答案:

答案 0 :(得分:0)

假设您有一个GridView,然后我们使用

将其复制到数据表
System.Data.DataTable GridToDT = new System.Data.DataTable();

            GridToDT = (System.Data.DataTable)MyGrid.DataSource;

相应的代码现在将您当前的gridview复制到GridToDt Datatable以从表中删除任何列,您需要做的是找出列的索引值

GridToDT .Columns.RemoveAt(1);

或使用列名

GridToDT .Columns.Remove("Col 1");

对于你的其他问题,你可以做这样的事情

for(int i = GridToDT .Rows.Count-1; i >= 0; i--)
 {
DataRow dr = GridToDT .Rows[i];
if (dr["Col 2"] == "Three")
    dr.Delete();
 }

希望这会有所帮助。如果有帮助,请随时将其标记为答案

答案 1 :(得分:0)

简单地说,您可以这样做以满足您的上述条件:

var dtableDemo = new DataTable();
dtableDemo = this.dgvDemo.DataSource as DataTable; //// Getting the datatable of datagridview datasource
if (dtableDemo != null)
{
    dtableDemo.Columns.RemoveAt(0); //// Removing the first column of derived table

    dtableDemo.Rows.Cast<DataRow>().Where(
               row => row.ItemArray.Contains("put_your_value_to_check")).ToList()
               .ForEach(row => row.Delete()); //// Remove the row if it contains the given value
    dtableDemo.AcceptChanges(); //// Finalize the delete
}