2016-07-25 64 views
0

我有一个小问题,我无法找到解决方案。DataTable上的RejectChanges()删除DataGridView中的所有行

我有一个自定义dataGridView的窗体。 这个datagridView需要一个数据源。 DataSource是我自己创建的Datatable(稍后将由数据库数据表替换)。到目前为止,一切都显示得很好。

现在我在我的表单中有2个按钮。 一个保存,一个Cancell。 我想要做的是当我点击cancell时,我想对我的datagridView所做的更改返回到其原始dataTable。

到目前为止,当我点击按钮时,它只是删除所有行(列保留)。

这里是什么,我在我的代码做一个为例:

public partial class UserControlMyDataGrid : UserControl 
{ 
    private DataTable originalDataTable; 

    public UserControlRechercheDataGrid() 
    { 
     InitializeComponent(); 

     originalDataTable = new DataTable(); 
     originalDataTable.Columns.Add("col A", typeof(int)); 
     originalDataTable.Columns.Add("col B"); 
     originalDataTable.Columns.Add("col C", typeof(bool)); 
     originalDataTable.Columns.Add("col D"); 

     for (int j = 0; j < 5; j++) 
     { 
      originalDataTable.Rows.Add(j, "c" + j.ToString(), true, "test"); 
     } 

     dataGridView1.DataSource = originalDataTable; 
    } 

private void buttonCancelModifications_Click(object sender, EventArgs e) 
    { 
     originalDataTable.RejectChanges(); 
     dataGridView1.Refresh(); 
    } 

} 

人有,为什么它的行为这样的任何想法?

回答

0

这是因为所有的RowState都是Added。在初始填充数据表后,您应该致电AcceptChanges,使其成为Unmodified

查看:https://msdn.microsoft.com/en-us/library/system.data.datarow.rowstate(v=vs.110).aspx

+0

非常感谢。我读过MSDN文档,并检查了rowstate,但为了dattable.RejectChanges()它只讨论了修改和删除状态,而不是添加状态。无论如何都是 。再次感谢。这澄清了很多。 小问题。我只需要做同样的事情,如果我想保存它。只需接受更改,然后按照我认为合适的方式导出数据表? – lolplayer101