CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

关于asp.net中datagrid的多列更新(c#)

楼主loyern()2006-10-03 20:18:44 在 .NET技术 / ASP.NET 提问

请各位大哥帮帮忙:  
  我在页面上放了一个datagrid,建立了模板列,在模板列的itemtemplete上放了textbox,我现在修改修改datagrid上textbox里面的数据,然后点button来更新到数据库,我该怎么更新到数据库?  
   
  代码  
   
  private   void   bt_save_Click(object   sender,   System.EventArgs   e)  
  {  
  OleDbDataAdapter   sda   =   new   OleDbDataAdapter("select   *   from   yczj_cyxx",Utility.Connection);  
   
  DataSet   ds   =new   DataSet();  
   
  sda.TableMappings.Add("yczj_cyxx","yczj_cyxx");  
   
  try  
  {  
  sda.Fill(myDs,"yczj_cyxx");  
   
  }  
  catch  
  {  
  }  
  OleDbCommandBuilder   odb=   new   OleDbCommandBuilder(sda);  
  int   val   =   sda.Update(myDs,"yczj_cyxx");  
  ds.AcceptChanges();  
   
  GridBind();  
  }  
   
  这样也不会把修改的值更新到数据库?该怎么更新? 问题点数:20、回复次数:14Top

1 楼loyern()回复于 2006-10-03 20:34:30 得分 0

有没有人在啊,请帮我一下,在线等待...Top

2 楼zhangyu028(听天之音)回复于 2006-10-03 22:31:33 得分 0

一般都是真接用SQL的update语句来更新。你是怎么设计的,怎么用bt_save按钮来更新?Top

3 楼loyern()回复于 2006-10-03 22:33:10 得分 0

我想更新整个datagrid中修改个的内容.  
  也就是datagrid中的两列内容Top

4 楼fphuang(人在哈尔滨·四月)回复于 2006-10-03 22:36:19 得分 0

把itemtemplete中textbox的值取出来,然后用update   更新数据库Top

5 楼loyern()回复于 2006-10-03 22:36:44 得分 0

请你们给我看看出点主意,我做到这里就做不下去了..  
  20分,帮帮忙  
  在线等待....  
  qq:290362823Top

6 楼xingzhiyun(八宝齐)回复于 2006-10-03 22:38:38 得分 0

下面是一个ds修改后自动更新数据库的例子,以前学习时记的笔记,现在我也看不大懂了  
  System.Text.StringBuilder   s;  
  SqlConnection   Conn;  
  DataTable   表=new   DataTable("员工");  
  SqlDataAdapter   da;  
   
  Conn=new   SqlConnection("server=192.168.1.1;uid=sa;pwd=gxl;database=test");  
  Conn.Open();  
  da=new   SqlDataAdapter("select   *   from   员工",Conn);  
   
  #region   修改Command的设定  
  SqlCommand   cmd=new   SqlCommand();  
  cmd.Connection=Conn;  
  s=new   System.Text.StringBuilder("");  
  s.Append("update   员工   set   姓名=@name,年龄=@age,工资=@wage   where   姓名=@Original_name");  
  cmd.CommandText=s.ToString();  
  cmd.UpdatedRowSource=UpdateRowSource.Both;  
  cmd.Parameters.Add(new   SqlParameter("@name",SqlDbType.VarChar,1024,"姓名"));  
  cmd.Parameters.Add(new   SqlParameter("@age",SqlDbType.Int,1024,"年龄"   ));  
  cmd.Parameters.Add(new   SqlParameter("@wage",SqlDbType.Money,1024,"工资"   ));  
  cmd.Parameters.Add(new   SqlParameter("@Original_name",   SqlDbType.NVarChar,1024,   ParameterDirection.Input,   false,   ((System.Byte)(0)),   ((System.Byte)(0)),   "姓名",   DataRowVersion.Original,   null));  
  //这里获取的是[姓名]的原始值,用来定位行  
  //这里要求[姓名]是主键  
  da.UpdateCommand=cmd;  
  #endregion  
   
  da.Fill(表);  
  表.Rows[0]["姓名"]="你好";  
  表.Rows[0]["年龄"]=21;  
  表.Rows[1]["年龄"]=22;  
   
  da.Update(表);//修改了2行,会执行update命令,数据库中会进行相应的改动.  
   
  Conn.Close();  
  Console.WriteLine("执行完毕");  
  Top

7 楼loyern()回复于 2006-10-03 22:39:56 得分 0

private   void   bt_save_Click(object   sender,   System.EventArgs   e)  
  {  
  OleDbDataAdapter   sda   =   new   OleDbDataAdapter("select   *   from   yczj_cyxx",Utility.Connection);  
   
  DataSet   ds   =new   DataSet();  
   
  sda.TableMappings.Add("yczj_cyxx","yczj_cyxx");  
   
  try  
  {  
  sda.Fill(myDs,"yczj_cyxx");  
   
  }  
  catch  
  {  
  }  
   
   
   
  //遍历所有行  
  myDs.Tables["yczj_cyxx"].PrimaryKey   =   new   DataColumn[]{myDs.Tables["yczj_cyxx"].Columns["cyhm"]};//设置表主键  
  foreach   (DataGridItem   di   in   DataGrid1.Items)      
   
  {      
   
  // //不遍历datagrid中的   header   or   footer.        
   
  if   (di.ItemType   ==   ListItemType.Item   ||   di.ItemType   ==   ListItemType.AlternatingItem)      
   
  {      
  DataRow   dr   =   myDs.Tables["yczj_cyxx"].Rows.Find(DataGrid1.DataKeys[((Label)DataGrid1.FindControl(Label11)).Text]);      
   
  if   (((CheckBox)di.FindControl("CheckBox1")).Checked)      
  {      
   
   
                                                  dr["new_cbbz"]   =   "0";  
   
   
  }        
   
  //   更新  
   
  dr["cxz"]   =   ((TextBox)di.FindControl("TextBox2")).Text;      
  dr["bg_yy"]   =   ((DropDownList)di.FindControl("ddl_wbyy")).SelectedValue;  
   
  // dr["TEL"]   =   ((TextBox)di.FindControl("TEL")).Text;      
   
  // ds.Tables["yczj_cyxx"].Rows.Add(dr);  
   
   
   
  // }      
  int   val   =   sda.Update(myDs,"yczj_cyxx");  
  ds.AcceptChanges();Top

8 楼happyhippy(Silent Void)回复于 2006-10-03 22:44:47 得分 0

OleDbDataAdapter   sda   =   new   OleDbDataAdapter("select   *   from   yczj_cyxx",Utility.Connection);  
  DataSet   ds   =new   DataSet();  
  sda.TableMappings.Add("yczj_cyxx","yczj_cyxx");  
  sda.Fill(myDs,"yczj_cyxx");  
  你从数据库中取得数据,没有做任何修改又写回数据库了:  
  OleDbCommandBuilder   odb=   new   OleDbCommandBuilder(sda);  
  int   val   =   sda.Update(myDs,"yczj_cyxx");  
   
  既然是只修改了一个一条记录中的一个字段,直接写SQL语句就可以了,用DataSet/DataAdapter/CommandBuilder来更新的话,效率极慢。Top

9 楼loyern()回复于 2006-10-03 22:50:35 得分 0

happyhippy(寂静的虚空)  
  请你详细点,小第对这个一点不熟悉Top

10 楼loyern()回复于 2006-10-03 22:52:06 得分 0

要修改的是多行多列..  
  也就是对某两列的所有行进行修改Top

11 楼superliu1122(SuperTNT)回复于 2006-10-04 06:30:27 得分 0

private   void   bt_save_Click(object   sender,   System.EventArgs   e)  
  {  
  OleDbDataAdapter   sda   =   new   OleDbDataAdapter("select   *   from   yczj_cyxx",Utility.Connection);  
   
  DataSet   ds   =new   DataSet();  
   
  sda.TableMappings.Add("yczj_cyxx","yczj_cyxx");  
   
  try  
  {  
  sda.Fill(myDs,"yczj_cyxx");  
   
  }  
  catch  
  {  
  }  
   
   
   
  //遍历所有行  
  myDs.Tables["yczj_cyxx"].PrimaryKey   =   new   DataColumn[]{myDs.Tables["yczj_cyxx"].Columns["cyhm"]};//设置表主键  
  foreach   (DataGridItem   di   in   DataGrid1.Items)      
   
  {      
   
  ////不遍历datagrid中的   header   or   footer.        
   
  if   (di.ItemType   ==   ListItemType.Item   ||   di.ItemType   ==   ListItemType.AlternatingItem)      
   
  {      
  DataRow   dr   =   myDs.Tables["yczj_cyxx"].Rows.Find(DataGrid1.DataKeys[((Label)DataGrid1.FindControl(Label11)).Text]);      
   
  if   (((CheckBox)di.FindControl("CheckBox1")).Checked)      
  {      
   
   
                                                  dr["new_cbbz"]   =   "0";  
   
   
  }        
   
  //   更新  
   
  dr["cxz"]   =   ((TextBox)di.FindControl("TextBox2")).Text;      
  dr["bg_yy"]   =   ((DropDownList)di.FindControl("ddl_wbyy")).SelectedValue;  
   
  //dr["TEL"]   =   ((TextBox)di.FindControl("TEL")).Text;      
   
  //ds.Tables["yczj_cyxx"].Rows.Add(dr);  
   
   
   
  //}      
  int   val   =   sda.Update(myDs,"yczj_cyxx");  
  ds.AcceptChanges();  
   
   
   
   
  ----------------------------  
   
   
   
  这段代码有什么问题Top

12 楼loyern()回复于 2006-10-04 06:58:40 得分 0

报错:   dr["new_cbbz"]   =   "0";未引用到对象实例,就是dr["new_cbbz"]   未定义,new_cbbz我也通过select查询出来了的  
  Top

13 楼Jinglecat(晓风残月)回复于 2006-10-04 09:49:23 得分 0

 
  对于语句:  
   
  DataRow   dr   =   myDs.Tables["yczj_cyxx"].Rows.Find(DataGrid1.DataKeys[di.ItemIndex]);      
   
  确保得到的   dr   !=   nullTop

14 楼charles_y(每天上网一小时)回复于 2006-10-08 12:20:27 得分 0

这个问题不是一句两句能说清楚的,关键是要理解原理。  
   
  DataTable   中的Row   的状态直接影响它会不会更新对应的数据库中的表的内容。Top

相关问题

关键词

得分解答快速导航

  • 帖主:loyern

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo