【问题标题】:Edit datagridview in runtime and update database在运行时编辑 datagridview 并更新数据库
【发布时间】:2013-03-25 06:01:29
【问题描述】:

我搜索了一些帖子,但仍然无法正常工作。

我有一个用 C# 编写的窗口应用程序,在这里我将 datagridview 绑定到我的数据库:

public static DataSet GetDataSet(string sql)
    {
        using (SqlConnection cn = new SqlConnection(constr))
        {
            SqlDataAdapter da = new SqlDataAdapter(sql, cn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;

        }
    }

我将datagridview绑定在另一个类中:

string sql = "select Amount, Price, Description from myTable";
ds = DbHelper.GetDataSet(sql);
dataGridView2.DataSource = ds.Tables[0];

我创建了一个按钮供用户在编辑 datagridview 后更新数据库:

string sql = "select Amount, Price, Description from myTable";
DbHelper.UpdateDataSet(sql, ds);
MessageBox.Show("done");

public static void UpdateDataSet(string sql, DataSet ds)
    {
        using (SqlConnection cn = new SqlConnection(constr))
        {
            SqlDataAdapter da = new SqlDataAdapter(sql, cn);
            da.Update(ds);
        }
    }

这是错误,发生在da.Update(ds); 行:

当传递带有修改行的 DataRow 集合时,更新需要有效的 UpdateCommand。

感谢您的帮助。

编辑 我可以让它工作:

SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);
da.UpdateCommand = commandBuilder.GetUpdateCommand();

但只有当我在 datagridview 中显示键时,否则:

对于不返回任何键列信息的 SelectCommand,不支持为 UpdateCommand 生成动态 SQL。

如果我不想在 datagridview 中显示密钥,如何克服这个问题?

【问题讨论】:

  • 您希望如何使用SELECT 语句更新数据库?

标签: c# datagridview


【解决方案1】:

SqlCommandBuilder 需要主键来更新字段。您仍然可以将键加载到 DataGridView,但隐藏列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多