1

我的代码在使用DataGridView.

我有一个错误da.update(dt);它说,

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

当我将 更改为SELECT时,UPDATE/INSERT出现错误da.fill(dt);

我的代码有什么问题?

这是我的代码:

private void btnEdit_Click(object sender, EventArgs e) > {
    con.Open();
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM RegistrationTable", con);
    da.Fill(dt);
    dt.Rows[dgvREGtable.CurrentRow.Index].BeginEdit();
    dt.Rows[dgvREGtable.CurrentRow.Index][0] = tbFirstname.Text;
    dt.Rows[dgvREGtable.CurrentRow.Index][1] = tbLastname.Text;
    dt.Rows[dgvREGtable.CurrentRow.Index][2] = tbEmail.Text;
    dt.Rows[dgvREGtable.CurrentRow.Index][3] = tbContacts.Text;
    dt.Rows[dgvREGtable.CurrentRow.Index][4] = tbUsername.Text;
    dt.Rows[dgvREGtable.CurrentRow.Index][5] = tbPassword.Text;
    dt.Rows[dgvREGtable.CurrentRow.Index].EndEdit();
    SqlCommandBuilder cb = new SqlCommandBuilder(da);
    da.Update(dt);
    displayrecords();
    con.Close();
}
4

2 回答 2

5

您的选择查询需要返回表的主键。如果您的表没有主键,则需要设置一个。

于 2012-10-14T16:47:20.013 回答
2

在我看来,实现这一点的最简单方法是将 DataGridView 实际绑定到您的数据集,然后绑定将为您处理所有丑陋的东西。例如:

DataSet mydata = new DataSet();
// populate your dataset however you like
DataBindingSource mybindingsource = new DataBindingSource(typeof(DataSet));
mybindingsource.DataSource = mydata;
DataGridView mydatagridview = new DataGridView();
mydatagridview.DataSource = mybindingsource;

这就是本质的方式,但设计师更容易实现这一点。

于 2012-10-14T16:47:49.373 回答