CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

【菜鸟请教】关于DataGrid和DataTable的...

楼主snrfqbgu(清晨晚风)2005-06-01 22:12:55 在 .NET技术 / ASP.NET 提问

请教各位前辈,  
  我在DataGrid中绑定了一个有3行空值的DataTable。  
  怎么能做到在DataGrid编辑状态,点击更新时把当前行新添入的值更新到DataTable对应的行中?  
  最后窗体上有一个保存按钮,点击保存按钮时,又如何把DataTable中各行的值依次插入数据库? 问题点数:100、回复次数:18Top

1 楼libinguest(上善若水)回复于 2005-06-01 22:39:08 得分 5

private   void   dgdone_UpdateCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
  string   str=((TextBox)e.Item.Cells[2].Controls[0]).Text;  
  SqlConnection   conn=new   SqlConnection"server=LIBIN;database=stu_info;uid=sa;pwd=1129");  
  SqlCommand   cmd=new   SqlCommand("proupdate",conn);  
  cmd.CommandType=CommandType.StoredProcedure;  
  cmd.Parameters.Add"@id",SqlDbType.Int,4).Value=Convert.ToInt32(str);//此参数代表每条记录在数据源中的唯一ID号  
                    str=((TextBox)e.Item.Cells[3].Controls[0]).Text;  
  cmd.Parameters.Add("@name",SqlDbType.VarChar,20).Value=str; str=((TextBox)e.Item.Cells[4].Controls[0]).Text;  
  cmd.Parameters.Add("@pwd",SqlDbType.VarChar,20).Value=str;  
  conn.Open();  
  cmd.ExecuteNonQuery();  
                    this.dgdone.EditItemIndex=-1;  
  conn.Close();  
  Query();//这是个刷新DataGrid的自定义方法。  
  }  
   
   
  你做个参考吧!Top

2 楼xiaopai20(小排——流浪狗)回复于 2005-06-01 23:03:42 得分 5

 
  private   void   dataGridSubject_EditCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
  this.dataGridSubject.EditItemIndex   =   e.Item.ItemIndex;  
  //重新绑定下数据  
  }  
   
  private   void   dataGridSubject_CancelCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
  this.dataGridSubject.EditItemIndex   =   -1;  
  //重新绑定下数据  
  }  
   
  private   void   dataGridSubject_UpdateCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
  int   id   =   Convert.ToInt32(   this.dataGridSubject.DataKeys[e.Item.ItemIndex]   );  
  SqlProvider.Subject.Instance().Update(   id,   ((TextBox)e.Item.Cells[0].Controls[0]).Text,  
  ((TextBox)e.Item.Cells[1].Controls[0]).Text,  
  ((TextBox)e.Item.Cells[2].Controls[0]).Text,   ((TextBox)e.Item.Cells[3].Controls[0]).Text,  
  // Convert.ToInt32(e.Item.Cells[4].Text),  
  Convert.ToInt32(((TextBox)e.Item.Cells[5].Controls[0]).Text),  
  Convert.ToInt32(   e.Item.Cells[6].Text   )   );  
  this.dataGridSubject.EditItemIndex   =   -1;  
  //重新绑定下数据  
  }  
   
  private   void   dataGridSubject_DeleteCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
  int   id   =   Convert.ToInt32(   this.dataGridSubject.DataKeys[e.Item.ItemIndex]   );  
  SqlProvider.Subject.Instance().Delete(   id   );  
  this.dataGridSubject.EditItemIndex   =   -1;  
  //重新绑定下数据  
  }Top

3 楼snrfqbgu(清晨晚风)回复于 2005-06-02 09:32:27 得分 0

请问把DataGrid中的数据更新到DataTable中有什么好的方法吗?  
  Top

4 楼snrfqbgu(清晨晚风)回复于 2005-06-02 11:59:26 得分 0

急呀~~~~~~~~自己顶一下:(Top

5 楼snrfqbgu(清晨晚风)回复于 2005-06-03 11:53:52 得分 0

555555石沉大海了.....Top

6 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-03 12:51:30 得分 15

请问把DataGrid中的数据更新到DataTable中有什么好的方法吗?  
  -------  
  没有什么好办法,只能一行一行取值,一行一行更新.取出,写入.  
  但你这种方式不太好.你可到如下地址,看一个完整的DATAGRID操作实例.  
   
  http://community.csdn.net/Expert/topic/4016/4016964.xml?temp=.5576746Top

7 楼liuqinglq(白菜)回复于 2005-06-03 12:58:43 得分 0

请问把DataGrid中的数据更新到DataTable中有什么好的方法吗?  
  -----------------  
   
  楼主的要求有点奇怪  
   
  是只要更新到DataTable而不更新到数据库么?Top

8 楼snrfqbgu(清晨晚风)回复于 2005-06-04 13:16:42 得分 0

楼主的要求有点奇怪  
   
  是只要更新到DataTable而不更新到数据库么?  
  --------------------------  
  呵呵,是呀,要求是这样的:  
  窗体上有个'添加'和‘保存’按钮,点击‘添加’时,在DataGrid中添加数行空白记录,用户使用DataGrid的编辑功能进行添加记录。最后点击‘保存’按钮,把上面数条记录一起更插入到数据中。  
  我是初学者,所以百思不得其解了@_@Top

9 楼itflying(it学习者 )回复于 2005-06-04 13:44:47 得分 15

下面的这个例子提供了利用DataGrid编辑、修改、删除记录的方法,数据库字段名称和类型如下。  
   
  数据库aa中表   people:People.sql  
   
  if   exists   (select   *   from   dbo.sysobjects   where    
  id   =   object_id(N'[dbo].[People]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)  
  drop   table   [dbo].[People]  
  GO  
   
  CREATE   TABLE   [dbo].[People]   (  
  [pkID]   [int]   IDENTITY   (1,   1)   NOT   NULL   ,  
  [FirstName]   [char]   (100)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [LastName]   [char]   (100)   COLLATE   Chinese_PRC_CI_AS   NULL    
  )   ON   [PRIMARY]  
  GO  
   
  EditDataGridCS.aspx  
   
  <%@   Page   Language="c#"   debug="true"%>  
  <%@   Import   Namespace="System.Data"%>  
  <%@   Import   Namespace="System.Data.SqlClient"   %>  
   
  <script   runat="server">  
   
  //make   first   sql    
  String   sql   =   "";  
  String   strCnn   =   "Data   Source=.;Initial   Catalog=aa;User   Id=sa;Password=;";  
  //create   a   datasource   function  
  public   ICollection   CreateDataSource   ()   {  
  SqlConnection   conn   =   new   SqlConnection(strCnn);  
   
  SqlDataAdapter   db_sqladaptor   =   new   SqlDataAdapter(sql,conn);  
   
  DataSet   ds   =   new   DataSet();  
  db_sqladaptor.Fill(ds,"MyDataResult");  
   
  DataView   myView   =   ds.Tables["MyDataResult"].DefaultView;  
  return   myView;  
  }  
   
   
  //do   page   load  
   
  public   void   Page_Load(Object   sender,   EventArgs   e)   {  
  strCnn   =   "Data   Source=.;Initial   Catalog=aa;User   Id=sa;Password=;";  
   
  if   (!IsPostBack)    
  {  
  sql   =   "Select   *   FROM   People";  
  People.DataSource   =   CreateDataSource();  
  People.DataBind();  
  }  
   
  }  
   
  public   void   Page_Grid(Object   sender,   DataGridPageChangedEventArgs   e)    
  {  
  sql   =   "Select   *   FROM   People";  
  //   Set   CurrentPageIndex   to   the   page   the   user   clicked.  
  People.CurrentPageIndex   =   e.NewPageIndex;  
   
  //   Rebind   the   data.    
  People.DataSource   =   CreateDataSource();  
  People.DataBind();  
   
  }  
   
  public   void   People_Edit(Object   sender,   DataGridCommandEventArgs   e)    
  {  
  sql   =   "Select   *   FROM   People";  
   
  People.EditItemIndex   =   e.Item.ItemIndex;  
  People.DataSource   =   CreateDataSource();  
  People.DataBind();  
   
  }  
   
  public   void   People_Cancel(Object   sender,   DataGridCommandEventArgs   e)    
  {  
  sql   =   "Select   *   FROM   People";  
  People.EditItemIndex   =   -1;  
  People.DataSource   =   CreateDataSource();  
  People.DataBind();  
   
  }  
   
  public   void   People_Update(Object   sender,   DataGridCommandEventArgs   e)    
  {  
  string   FirstName   =   ((TextBox)e.Item.Cells[1].Controls[1]).Text;  
  string   LastName   =   ((TextBox)e.Item.Cells[2].Controls[1]).Text;  
   
  SqlConnection   connUpdate   =   new   SqlConnection(strCnn);  
  connUpdate.Open();  
  String   sql_edit   =   "UPDATE   People   "   +  
  "SET   FirstName   =   '"   +   FirstName.Replace("'","''")+   "',"   +  
  "LastName   =   '"   +   LastName.Replace("'","''")+   "'"   +  
  "   WHERE   pkID   =   "   +   e.Item.Cells[0].Text;  
   
  SqlCommand   sqlCommandUpdate   =   new   SqlCommand(sql_edit,connUpdate);  
  sqlCommandUpdate.ExecuteNonQuery();  
  connUpdate.Close();  
   
  sql   =     "Select   *   FROM   People";  
  People.EditItemIndex   =   -1;  
  People.DataSource   =   CreateDataSource();  
  People.DataBind();  
   
  }  
   
  public   void   People_Delete(Object   sender,   DataGridCommandEventArgs   e)   {  
   
  SqlConnection   connDel   =   new   SqlConnection(strCnn);  
  connDel.Open();  
  String   sql_Del   =   "DELETE   FROM   People   "   +  
  "   WHERE   pkID   =   "   +   e.Item.Cells[0].Text;  
   
  SqlCommand   sqlCommandDel   =   new   SqlCommand(sql_Del,connDel);  
  sqlCommandDel.ExecuteNonQuery();  
  connDel.Close();  
   
  sql   =     "Select   *   FROM   People";  
  People.EditItemIndex   =   -1;  
  People.DataSource   =   CreateDataSource();  
  People.DataBind();  
   
  }  
   
  </script>  
   
  <font   face="arial"   size="3">  
  <b>Edit   People</b>  
  </font>  
  <br>  
   
  <form   runat="server">  
   
  <asp:DataGrid   id="People"   runat="server"  
  BorderColor="green"    
  Width="640"    
  PageSize="5"    
  AllowPaging="true"    
  OnPageIndexChanged="Page_Grid"    
  BorderWidth="1"  
  CellPadding="3"  
  AutoGenerateColumns="false"  
  ShowHeader="true"    
  Visible="true"    
   
  OnEditCommand="People_Edit"    
  OnCancelCommand="People_Cancel"    
  OnUpdateCommand="People_Update"    
  OnDeleteCommand="People_Delete">  
   
  <HeaderStyle   BorderColor="White"   BackColor="black"    
  ForeColor="White"    
  Font-Bold="True"    
  Font-Name="Arial"    
  Font-Size="9"   HorizontalAlign="Center"/>  
   
  <ItemStyle       BorderColor=""    
  BackColor="#FFFFF0"    
  ForeColor="Black"    
  Font-Name="Arial"    
  Font-Size="8"    
  Font-Bold="False"   HorizontalAlign="Center"/>  
   
  <EditItemStyle       BorderColor=""    
  BackColor="#FFFFF0"    
  ForeColor="Black"    
  Font-Name="Arial"    
  Font-Size="7"    
  Font-Bold="False"   HorizontalAlign="Center"/>  
   
  <PagerStyle   Mode="NumericPages"   Font-Size="8"/>  
   
  <Columns>  
   
  <asp:BoundColumn   HeaderText="ID"   ReadOnly="true"   DataField="pkID"/>  
   
  <asp:TemplateColumn>  
   
  <HeaderTemplate>  
  <b>   First   Name   </b>  
  </HeaderTemplate>  
   
  <ItemTemplate>  
  <asp:Label  
  Text='<%#   DataBinder.Eval(Container.DataItem,   "FirstName").ToString().Trim()   %>'  
  runat="server"/>  
  </ItemTemplate>  
   
   
  <EditItemTemplate>  
  <asp:TextBox   id="FirstName"   Text='  
  <%#   DataBinder.Eval(Container.DataItem,   "FirstName").ToString().Trim()   %>'    
  runat="server"   Width="100%"/>  
  </EditItemTemplate>  
   
  </asp:TemplateColumn>  
   
  <asp:TemplateColumn>  
   
  <HeaderTemplate>  
  <b>   Last   Name   </b>  
  </HeaderTemplate>  
   
  <ItemTemplate>  
  <asp:Label    
  Width="200"    
  Text='<%#   DataBinder.Eval(Container.DataItem,   "LastName").ToString().Trim()   %>'    
  runat="server"/>  
  </ItemTemplate>  
   
  <EditItemTemplate>  
  <asp:TextBox   id="LastName"   Text='<br>  
  <%#   DataBinder.Eval(Container.DataItem,   "LastName").ToString().Trim()   %>'    
  runat="server"   Width="100%"/>  
  </EditItemTemplate>  
   
  </asp:TemplateColumn>  
   
  <asp:EditCommandColumn  
  ButtonType="LinkButton"  
  CancelText="Cancel"  
  EditText="Edit"  
  UpdateText="Update"   />  
   
  <asp:ButtonColumn   Text=   "Delete"   CommandName="Delete"></asp:ButtonColumn>    
   
  </Columns>  
   
  </asp:DataGrid>  
   
  </form>  
   
  Top

10 楼jerry_yuan(jerry)回复于 2005-06-04 14:07:42 得分 10

给你一个思路:  
  1、定义一个DataTable   ,设置主键  
  2、把数据库的数据绑到datatable  
  3、在datagrid更新时,找到datatable对应的行  
  4、更新找到的行,再将datagrid重新绑定修改后的datatable  
  5、点确定时,用循环取一行datatable的数据更新数据库(取一行更新一行)  
  Top

11 楼renyu732(Sysinfo)回复于 2005-06-04 17:46:05 得分 0

upTop

12 楼criedshy(哭泣的天空)回复于 2005-06-15 06:49:39 得分 0

怎么不直接保存到数据库中?Top

13 楼srz007(呵呵)回复于 2005-06-15 08:58:13 得分 20

楼主应该把这个DataTable转化并序列化保存到viewstate里或直接保存到内存中来临时的保存数据,最后点那个总的"保存"按钮时再把DataTable里的数据插入到数据库Top

14 楼brightheroes(在地狱中仰望天堂)回复于 2005-06-15 09:06:53 得分 30

类似这样的需求,可以考虑用Session或者是ViewState(数据量较小的时候),来保存这个DataTable  
  每次页面PostBack都重新从Session里面获取这个数据源并且重新绑定。  
  修改,删除的时候,直接操作这个数据源的对应行。  
  最后提交的时候,遍历这个DataTable,根据DataRow的  
  RowState来判断是Insert,Update,还是DeleteTop

15 楼bgu(彼岸)回复于 2005-06-15 09:08:06 得分 0

WebForm不是WinForm  
  没有必要这样做。Top

16 楼ghchen()回复于 2005-06-15 09:48:49 得分 0

楼上说得很详细呢Top

17 楼brightheroes(在地狱中仰望天堂)回复于 2005-06-15 09:49:12 得分 0

有的时候还是有这样的需求的Top

18 楼snrfqbgu(清晨晚风)回复于 2005-07-02 10:33:46 得分 0

在asp.net中   这样的需求根本就是蛇足,呵呵  
  结贴了,谢谢大家帮忙!Top

相关问题

  • 菜鸟100分求救,datatable,datagrid相关
  • 关于删除与datagrid绑定的datatable中某行的菜鸟问题
  • DataTable到DataGrid
  • 关于把数据库中的值经过转换后放入datatable中的相应列以供datagrid使用的两个菜鸟问题
  • DataGrid的菜鸟问题
  • 菜鸟问题:关于datagrid
  • 菜鸟问题:datagrid问题
  • 菜鸟100分求救,如何在datatable中随即排序?
  • 菜鸟问题关于在datatable添加Columns
  • 关于datagrid的菜鸟问题

关键词

  • datagrid
  • 数据
  • 数据库
  • 修改
  • datagridsubject
  • datatable
  • 更新
  • 保存
  • 一行
  • toint32

得分解答快速导航

  • 帖主:snrfqbgu
  • libinguest
  • xiaopai20
  • hchxxzx
  • itflying
  • jerry_yuan
  • srz007
  • brightheroes

相关链接

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

广告也精彩

反馈

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