none
C# winform中DataGridView数据更新疑问? RRS feed

  • 问题

  • A:保存数据方法如下:

     public void SaveDataGridData()
    
      {
    
       SQLiteDataAdapter da = daa;
    
       SQLiteCommandBuilder builder = new SQLiteCommandBuilder(da);
    
       SQLiteCommand upcmd = new SQLiteCommand("update dingdan set s=@s,m=@m,l=@L,xl=@xl,xxl=@xxl,st_comment=@comment where styleid=@styleid", conn);
    
       upcmd.Parameters.Add("@s", System.Data.DbType.Int32, 8, "s");
    
       upcmd.Parameters.Add("@m", System.Data.DbType.Int32, 8, "m");
    
       upcmd.Parameters.Add("@l", System.Data.DbType.Int32, 8, "l");
    
       upcmd.Parameters.Add("@xl", System.Data.DbType.Int32, 8, "xl");
    
       upcmd.Parameters.Add("@xxl", System.Data.DbType.Int32, 8, "xxl");
    
       upcmd.Parameters.Add("@comment", System.Data.DbType.String, 300, "st_comment");
    
       upcmd.Parameters.Add("@styleid", System.Data.DbType.String, 30, "styleid");
    
       da.UpdateCommand = upcmd;
    
       da.Update(ds, "DPeiDH");
    
      }
    
    

    B:在窗体界面使用了一个回车换列的方法:回车可以换列;保存数据方法也执行了,但是就是没有更新到数据库。

    //DataGrid中回车换列
    
      protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
    
      {
    
       if (msg.WParam.ToInt32() == (int)Keys.Enter)
    
       {
    
        SaveDataGridData();
    
        SendKeys.Send("{Tab}");
    
        return true;
    
       }
    
       return base.ProcessCmdKey(ref msg, keyData);
    
      } 
    
    

    C:在界面新增一个保存按钮,并添加代码如下:   点击保存按钮,修改后的数据保存了。 

      private void dpeibtnsave_Click(object sender, EventArgs e)
    
      {
    
       SaveDataGridData();
    
      }
    
    

    其他试过很多方法:

    比如:将数据保存的方法写在单元格状态改变事件、单元格离开事件中等待都不能保存数据。而使用按钮的话,可以一直保存。

     

      请高手指点下,这是什么原因导致的?


    hi,this is paul!
    2011年3月1日 7:10

答案

  • 在执行保存方法的时候 设置一个断点,debug一下,看看调用保存方法的数据是多少,是否是你修改后的数据。

     


    family as water
    • 已标记为答案 Cookie Luo 2011年3月8日 2:05
    2011年3月1日 7:32
  • 你好!

    建议你将代码改为下面的方式,减少数据交互量(不需要更新的数据没有传输的必要)。另外在注释中有可能产生的原因。

    var updateObj = ds.Tables["DPeiDH"].GetChanges();// 获取仅需要更新数据
    
    if (ds == null) // 若这里没有数据可能是你在之前的代码中调用了 AcceptChanges 或对应的表中没有数据
      return;
    
    ta.Update(updateObj);
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 Cookie Luo 2011年3月8日 2:05
    2011年3月2日 5:18
    版主

全部回复

  • 在执行保存方法的时候 设置一个断点,debug一下,看看调用保存方法的数据是多少,是否是你修改后的数据。

     


    family as water
    • 已标记为答案 Cookie Luo 2011年3月8日 2:05
    2011年3月1日 7:32
  • 断点下在:

    da.UpdateCommand = upcmd;

    这个地方,看看upcmd里面的SQL语句是什么,取出来,直接到DB中执行看看可否更新


    yulai
    2011年3月2日 4:56
  • 你好!

    建议你将代码改为下面的方式,减少数据交互量(不需要更新的数据没有传输的必要)。另外在注释中有可能产生的原因。

    var updateObj = ds.Tables["DPeiDH"].GetChanges();// 获取仅需要更新数据
    
    if (ds == null) // 若这里没有数据可能是你在之前的代码中调用了 AcceptChanges 或对应的表中没有数据
      return;
    
    ta.Update(updateObj);
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 Cookie Luo 2011年3月8日 2:05
    2011年3月2日 5:18
    版主
  • ds的值在哪改变的
    http://feiyun0112.cnblogs.com/
    2011年3月4日 1:27
    版主