如何将更改的数据网格值保存到数据表中?

时间:2010-09-16 01:14:15

标签: c# winforms datagridview

我有一个数据集和2个数据表。

Datatable1 = Combobox源(这将显示选项列表) Datatable2 = DataGrid(这将显示与组合框中的选项相关的数据) 提交按钮(根据组合框选择的值填充数据网格)

当我在组合框中选择一个项目并单击“提交”时,它会加载datagrid中的相关记录。如果我然后更改数据网格中的值并单击提交按钮,我刚刚更改了值,消失了吗?

我怎样才能使任何更改的数据网格值修改数据,这样即使我查看不同的选项,我总是可以返回任何一个,保留任何更改的值?

这是我的代码:

    //Load the data grid according to the ComboCAtegory selection
    public void Grid_Load()
    {

        DataSet();
        var Result = from c in DataSet_Main.Tables[2].AsEnumerable()
                     where c.Field<string>("Test_Code").Equals(comboBox_CategorySelect.SelectedValue)
                     select c;

        dataGridView_Main.DataSource = Result.AsDataView();

        dataGridView_Main.Columns["Test_Code"].Visible = false;
        dataGridView_Main.Columns["ID"].Visible = false;
        dataGridView_Main.Columns["Description"].Visible = false;
        dataGridView_Main.Columns["Expected_Result"].Visible = false;


    }

    private void buttonSubmit_Click(object sender, EventArgs e)
    {
        Grid_Load();
    }

    public void Fail()
    {

        DataTable dt = DataSet_Main.Tables[2];

        //dataGridView_Main.SelectedRows[0].Cells["Check"].Value = "Fail";
        dt.Rows[dataGridView_Main.SelectedRows[0].Index]["Check"] = "Fail";

    }



    private void buttonFail_Click(object sender, EventArgs e)
    {
        Fail();
    }

希望这有道理吗?

2 个答案:

答案 0 :(得分:0)

我认为您的DataGrid已绑定到数据表。您需要做的是将更改发送回数据源,以便它们反映在绑定到同一数据源的第二个数据表中。为此,在DataGrid上为CellChanging事件编写一个事件处理程序,并且您可以在数据适配器上调用Update()方法(如果您使用的话,那就是)将更改发送到数据源。然后,在同一事件处理程序中,通过刷新数据绑定来更新组合框中的项目,以便组合框从第二个数据表中获取最新值。

这样,每当单元格在DataGrid中更改其值时,您可以检查它是否是您想要的相关单元格,并根据数据网格中的更改更新组合框。

答案 1 :(得分:0)

道歉我的坏......我是个头脑。

Tha datagrid自动绑定。我刚刚意识到我在我的datagrid_load方法中调用了我的初始数据集()方法 - 它正在调用我的数据库。因此,每当我填充数据网格时,它实际上是从数据库中刷新而不是数据表。

谢谢你的回忆......