2012-10-14 70 views
1

我的代码有问题,使用DataGridView编辑数据库中的数据。使用datagridview更新数据库中的数据C#

我在da.update(dt);它说的错误,

动态SQL生成的更新命令不抵抗 支持的SelectCommand不返回任何键列信息。

当我改变SELECTUPDATE/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(); 
} 

回答

5

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

+1

haha​​h tnx mate ..现在我知道我的问题是什么.. – azzyloth

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; 

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

相关问题