winform下的datagrid问题请教
    我是一个C#的初学者,尤其是winform下的编程,
    我想在一个datagrid控件里完成数据的录入,修改和删除等工作,我写好了OleDbDataAdapter的SelectCommand,UpdateCommand和InsertCommand,并在绑定的DataTable里加了一个RowChanged事件,在该事件里写入DataAdapter的Update方法.在没写InsertCommand时,数据的修改很好,但是加入InsertCommand后,数据的录入不象想象中那样,新增的记录要录入两次,才能成功,就是说在DataGrid的单元格输入后,要使这个单元格失去焦点,然后再在这个单元格里输入,这样update方法才产生作用.
    请问这是为什么?我什么地方做错了,怎么改正呢?

解决方案 »

  1.   

    因为你在RowChanged事件里面写的,估计你的新增加一条记录,是直接在网格上面点最后一行空行然后直接写的吧
      

  2.   

    我建议你把RowChanged事件修改一下实现方式,
    添加一个"保存修改"的按钮,用户点了保存之后,再调用DataAdapter的Update方法.
      

  3.   

    dugupiaoyun,是啊,是啊,你说得不错anthit事件响应代码在这里
    private void dt_RowChanged(object sender,DataRowChangeEventArgs e)
    {
    OleDbCommand cmd = new OleDbCommand();
    cmd.Connection = cn;
    //cmd.Parameters.Clear();
    switch (e.Action.ToString())
    {
    case "Change":
    cmd.CommandText = "update incomeclass set classname = @classname " +
    " where id = @id";
    cmd.Parameters.Add("@classname",OleDbType.Char,255,"classname");
    cmd.Parameters.Add("@id",OleDbType.Integer,8,"id");
    rs.UpdateCommand = cmd;
    break; case "Add":
    cmd.Parameters.Add("@ClassName",OleDbType.Char,255,"ClassName");
    cmd.CommandText = "Insert Into IncomeClass (ClassName) Values (@ClassName)";
    rs.InsertCommand = cmd;
    break;
    }
    try
    {
    txt1.Text = rs.Update(dt).ToString(); }
    catch (Exception er)
    {
    MessageBox.Show(er.Message.ToString());
    }
    }