高人指点一下,删除往往删除的不是DataGrid中的选定行,而且第一行和第二行删不掉
修改我想直接在DataGrid表中修改,用DataAdaper.Update()方法修改,可是实现不了!
请高人给指点一下 private void Form1_Load(object sender, System.EventArgs e)
{
this.MaximizeBox=false;
OracleConnection conn=new OracleConnection(strConn);
conn.Open();
OracleDataAdapter da=new OracleDataAdapter("select * from AddressBook",conn);
DataSet ds=new DataSet();
da.Fill(ds);
DataTable dt=ds.Tables[0];
dataGrid1.DataSource=dt;
conn.Close();
} private void btnModify_Click(object sender, System.EventArgs e)
{
try
{
OracleConnection conn=new OracleConnection(strConn);
conn.Open();
OracleDataAdapter da=new OracleDataAdapter("select * from AddressBook",conn);
OracleCommandBuilder cb=new OracleCommandBuilder(da);
da.UpdateCommand=cb.GetUpdateCommand;
DataSet ds=new DataSet();
da.Fill(ds);
DataTable dt=ds.Tables[0];
da.Update(ds);
conn.Close();
Form1_Load(sender,e);

}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void btnDelete_Click(object sender, System.EventArgs e)
{
try
{
OracleConnection conn=new OracleConnection(strConn);
conn.Open();
OracleCommand cmd=new OracleCommand("delete from AddressBook where No='"+(dataGrid1.CurrentRowIndex+1)+"'",conn);
cmd.ExecuteNonQuery();

conn.Close();
Form1_Load(sender,e);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
} }

解决方案 »

  1.   

    No='"+(dataGrid1.CurrentRowIndex+1)+"  这个不一定等啊.
    你可以根据crrentrowindex来获取内存中的表中的数据
    dt=(DataTable)dataGrid1.datasource
    dr.rows[datagrid1.currentrowindex]["no"] 来取OracleDataAdapter 的其他几个command也要设
      

  2.   

    取得特定行、列的值
    dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[2].Value.ToString();
      

  3.   

    你用了datatable绑定就不能修改grid的,要修改直接修改datatable的就行了
      

  4.   

    楼主这个删除语句有问题OracleCommand cmd=new OracleCommand("delete from AddressBook where No='"+(dataGrid1.CurrentRowIndex+1)+"'",conn); No应该为他的确认值,而不是行号+1,可以根据dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value.ToString()来得到当前选择行的NO的值。。要看你的NO在第几列,如果在第1列则上面语句的cell为cell[0],如果在第2列则为cell[1]。通过以上来获取其值,然后执行删除,再对dataGridView进行绑定一次,就可以看到行已经被删除了。或者先移除该行,remove该行,dataGridView1。Rows.RemoveAt(this.dataGridView1.CurrentCell.RowIndex),然后执行删除,则也可以实现,至于更新,则与上面的方法相识。最好根据其NO,也就是主键来进行修改。
      

  5.   

    OracleConnection conn=new OracleConnection(strConn); 
    conn.Open(); 
    OracleDataAdapter da=new OracleDataAdapter("select * from AddressBook",conn); 
    OracleCommandBuilder cb=new OracleCommandBuilder(da); 
    da.UpdateCommand=cb.GetUpdateCommand; 
    DataSet ds=new DataSet(); 
    da.Fill(ds); 
    DataTable dt=ds.Tables[0]; 
    da.Update(ds); 
    conn.Close(); 
    Form1_Load(sender,e); 在这个里面,当我们去更新一个表的时候,我们要知道一个映射关系,就是说我们要把更新一个字段,那么我们就要去指定它。
    所以说上面的部分中,你是直接的去update一个ds,这样的话,是做不到的。你要去指定你要更新的字段。
    当然你如果是使用了MS提供的邦定的wizard,那么你可以直接去使用你的邦定过的datagrid中的update()方法去更新你的datasource.
      

  6.   

    多谢楼上的讲解,那现在我把更新开成这样,还是不好用,如下所示:
    private void btnModify_Click(object sender, System.EventArgs e)
    {
    try
    {
    OracleConnection conn=new OracleConnection(strConn);
    conn.Open();
    OracleDataAdapter da=new OracleDataAdapter("select * from AddressBook",conn);
    DataSet ds=new DataSet();
    da.Fill(ds);
    DataTable dt=ds.Tables[0];
    OracleCommand cmdMod=new OracleCommand("update AddressBook set name='"+dt.Rows[dataGrid1.CurrentRowIndex]["name"]+"',englishname='"+dt.Rows[dataGrid1.CurrentRowIndex]["englishname"]+"',region='"+dt.Rows[dataGrid1.CurrentRowIndex]["region"]+"',"+
    "personno='"+dt.Rows[dataGrid1.CurrentRowIndex]["personno"]+"',address='"+dt.Rows[dataGrid1.CurrentRowIndex]["address"]+"',telephone='"+dt.Rows[dataGrid1.CurrentRowIndex]["telephone"]+"',mobile='"+dt.Rows[dataGrid1.CurrentRowIndex]["mobile"]+"',"+
    "email='"+dt.Rows[dataGrid1.CurrentRowIndex]["email"]+"',re='"+dt.Rows[dataGrid1.CurrentRowIndex]["re"]+"' where No='"+(dt.Rows[dataGrid1.CurrentRowIndex]["No"])+"'",conn);
    cmdMod.ExecuteNonQuery();
    conn.Close();
    Form1_Load(sender,e);

    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }
      

  7.   

    你最好debug一下你的SQL,你把cmdMod中的commandString给拿出来,完了自己手动的执行一下,看看结果如何。
    不过在这个时候你要好好看看你的SQL有没有问题。
      

  8.   

    Debug报告说Column[No]找不到,可我建数据库时明明,把它设为了主键呀,