背景:
   一.在C#.NET 2003 环境中,windows应用程序.
   二.SQLSERVER数据库中有两张表。表一名modelinfo,字段名:modelId(模型ID,主键)、modelName(模型名称)、 nodelNumber(节点数量) ; 表二n名odeinfo字段名:modelId(模型ID,主键)、nodeId(节点ID)、 nodeNumber(节点数量) , nodeName(节点名称)、txt(想定文档)。  
    三.部分代码:
   String jdName = " ";    //声明两个全局变量
   int m;    privat void Edit_clik(object sender,system,EventArgs e) 
   {  
       //节点信息编辑     int index= dataGrid1 CurrentRow Index;//选中dataGrid1查询结果的一行,获取选中行的索引.  
     DataSet myDataSet = (DataSet)dataGrid1.DataSource; 
     DataRow row = myDataSet.Tables[0].Row[index]; 
     m=Convert.ToInt 32 (row["modelId"].ToString());//获得主键的数码. 
     int n =   Convert.ToInt 32 (row["nodeNumber"].ToString());  //获得nodeNumber数码
     
     for(int j = 0; j <n , j++) //循环,动态生成n个节点按钮.
     { 
      Button but = new Button(); 
      but.Left = 100+j*100; 
      but.Top  = 100; 
      but.Size = new Size(55,55); 
      but.Name=j.ToString();   // 生成节点名称 
       but.MouseDown +=New MouseEventHandler(but_MouseDown); //右击事件 
       but.ContextMenu = contextMenu1;    //上下文菜单 
       but.Image= Image.FromFile(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Porsenal)+@"\image.git");  //动态生成节点按钮图标; 
     } 
  
    tabPage1.Controls.Add(but);     tabPage1.show();   //生成的节点跳转显示在tabPage1上. (注:先前dataGrid1是在tabPage2页面上的)    } 
   private Void menuItem12_clik(boject sender,System.EventArgs e) 
   {
    //在某个节点图标上右击选择上下文菜单"编辑"项,弹出新Form2,显示该节点信息      Form 2 frm = new Form2(); //对节点信息框Form2实例化 
     sqlconnection con= new sqlconnection (......) ;
    con.Open(); 
    sqlDataAdapter da = new sqlDataAdapter("select * from nodeinfo where modelId ='"+ m.tostring()+"'",con); 
    DataSet ds = new DataSet(); 
    da.Fill(ds,"nodeinfo"); 
    int k= convert.ToInt 32 (jdName.ToString()); //
    DataRow row = ds.Tables["nodeinfo"].Rows[k]; // 建立jdName和nodeId的对应关系.通过modelId和nodeId来唯一确定一条信息.    frm.texBox1.Text = row.ItemArrary[0].Tostring(); //对应modelId列
    frm.texBox2.Text = row.ItemArrary[1].Tostring(); //对应nodeNumber列
    frm.texBox3.Text = row.ItemArrary[2].Tostring(); //对应nodeId列
    frm.texBox4.Text = row.ItemArrary[3].Tostring(); //对应nodeName列
    frm.texBox5.Text = row.ItemArrary[4].Tostring(); //对应txt列    frm.show();   //显示节点信息.
问题一:要在Form2中实现对相应信息的修改和保存,怎样把修改结果保存到数据库?????????????
      还要求同时更改两张表的信息,怎样实现??????????????????????????
  } 
    private voidBut_MouseDoen(object Sender.Mouse EventArgs e ) 
    { 
      Button but = new Button(); 
      but =(Button)Sender;  
      jdName = but.Name; //用节点名作为节点属性,在右键单击时唯一标识选中的节点
    } 
   private void menuItem13_Clik(boject sender,System.EventArgs e) 
  { 
     //在某个节点图标上右击选择上下文菜单"删除"项,删除该节点图标及相应信息.       
问题二:  如何实现删除???????
      似乎不能直接用jdName 来标识选中的节点了,因为this_tabPage1.Controls.Remove (  存放Controls value,不能直接存放 "jdName",不知道怎么转换????  )     if (MessageBox.Show("确定删除此节点及其信息?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Waring)==DialogaResult.Yes)
    {
      sqlConnection con = new ...;
      con.Open();
      sqlCommand cmd = newSqlCommand ("delet from nodeinfo where modelId='"+m.tostring()+"'and nodeId = '"+jdName+"'",con);
     cmd.Connection = con;
     
     con.Close();                      
   
    MessageBox.Show("删除成功");
  
    } //  问题三:    这段代码能实现在数据库删除相应的信息吗??怎样该会更好呢?????????????????????
   } 
    

解决方案 »

  1.   

    如果数据是从两个表来的,可能需要从两个表删除。
        if (MessageBox.Show("确定删除此节点及其信息?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Waring)==DialogaResult.Yes) 
        { 
          sqlConnection con = new ...; 
          con.Open(); 
          sqlCommand cmd = newSqlCommand ("delet from nodeinfo where modelId='"+m.tostring()+"'and nodeId = '"+jdName+"'",con); //如果NodeID不好获取,如果NodeName也是唯一的
    //那么nodeName='"+jdName+"'",con也行
         cmd.Connection = con; 
          cmd.ExecuteNoQuery();//这行删除
         con.Close();                       
        
        MessageBox.Show("删除成功"); 
      

  2.   

    问题1:修改的问题
    这里我们先定义form2中的这个节点的信息所在的id,然后我们定义一个函数,例如:public bool ModifyTable(int id, string....)
    {
      string sql = "update modelinfo set(" + "modelName,....) values(" + ... + ") where modelId=" + id;
      sqlConnection con = new ...; 
      con.Open(); 
      sqlCommand cmd =new sqlCommand(conn,sql);
      cmd.ExecuteNonQuery();//执行修改命令,返回的结果大于0则表示成功
    }
    类似,可以写两个这样的函数进行修改操作。
      

  3.   

    在另一个帖子已经回了,如果是多表操作,必须自己写UpdateCommand顺便给楼主一个建议,用参数而不是拼接字符串组织你的Sql语句