2

我有一个看起来像这样的 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 中有值“三”,则 DataTable 将是

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

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

4

2 回答 2

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();
 }

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

于 2012-09-03T04:53:57.993 回答
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
}
于 2012-09-03T05:22:13.807 回答