【问题标题】:C# - Save button after searched the dataGridViewC# - 搜索dataGridView后保存按钮
【发布时间】:2023-03-30 04:00:01
【问题描述】:

我是编程新手,我创建了以下按钮来搜索 dataGridView

private void btnInCollection1_Click(object sender, EventArgs e)
{
    SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM dbo.SS1 WHERE InCollection = 1 ", con);
    DataTable data = new DataTable();
    sda.Fill(data);
    dataGridView1.DataSource = data;
}

我想编辑 dataGridView 中的数据,然后使用另一个按钮保存更改。 你能帮我保存代码吗?

我尝试了以下代码,但它没有将数据保存回数据库。

private void btnSaveGridView_Click(object sender, EventArgs e)
{
    Cursor.Current = Cursors.WaitCursor;
    try
    {
        sS1BindingSource2.EndEdit();
        sS1TableAdapter1.Update(this.sSDataSet1.SS1);
        MessageBox.Show("You have been successfully saved.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    Cursor.Current = Cursors.Default;
}

【问题讨论】:

    标签: c# datagridview


    【解决方案1】:

    你的设置有问题

    这一行:

    sS1TableAdapter1.Update(this.sSDataSet1.SS1);
    

    意味着你有一个强类型的数据集,设置了 tableadapter 和数据表,但是你的btnInCollection1_Click 代码意味着你已经绕过了所有这些,创建了一个弱类型的数据表,从数据适配器填充它并将其分配给数据源的网格。行得通,但有点儿买车然后推着它上下班,而不是开车

    这也意味着您的 datagridview 正在一个数据表中显示数据,但您尝试保存位于不同数据表中的数据

    我建议你把btnInCollection1_Click 中的所有代码都扔掉; VS 在你制作 tableadapter 的时候已经为你写好了,所以买了那条狗你就不需要自己吠了。

    将代码替换为:

    sS1TableAdapter1.Fill(this.sSDataSet1.SS1);
    

    在代码的其他地方,如果你还没有,把它放一次(例如在构造函数中):

    dataGridView1.DataSource = sS1BindingSource2;
    sS1BindingSource2.DataSOurce = this.sSDataSet1.SS1;
    

    您可能已经在 .Designer.cs 中包含这些行 - 如果您这样做了,您将不再需要它们。

    这可能不是最佳的,但我无法从您发布的内容中轻松确定必要的额外信息


    我真的会推荐你:

    • 制作一个新表格
    • 打开数据源窗口(查看菜单、其他窗口)
    • 将 SS1 节点拖到表单上
    • 出现一个网格,在底部的托盘中,您应该有一个ss1bindingsource 绑定到您的sSDataSet(网格绑定到绑定源。在后面的代码中,您应该有一个使用您的表格适配器的填充命令填充网格。还有一个带有保存按钮的绑定导航器

    您无需编写任何代码来填充网格或保存它 - 如果您查看新表单的代码文件,您会发现 VS 为您编写了所有代码

    如果您想使用表适配器执行参数化搜索,请打开您的数据集,右键单击适配器,选择添加查询并输入例如SELECT * FROM dbo.SS1 WHERE InCollection = @inColl。将方法称为 FillByInCollection 之类的相关名称(不要将其称为 FillBy1 - 无休止地将数字附加到方法和变量名称只是为了使它们唯一是一个愚蠢的想法,并且会导致程序高度不可读)然后在您的相关按钮中单击调用它:

    sS1TableAdapter1.Fill(this.sSDataSet1.SS1, 1); //fill collectionID 1
    

    【讨论】:

    • 非常感谢您的帮助!你为我节省了很多代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多