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

可以在Datagrid中编辑修改数据吗?

楼主ujjcel()2005-01-15 15:30:33 在 .NET技术 / ASP.NET 提问

在CS结构中,我们可以在datagrid中直接修改数据并保存,在asp.net中可以吗?  
  请大家进来说说 问题点数:80、回复次数:5Top

1 楼fokker(独孤龙)回复于 2005-01-15 15:34:19 得分 80

参考这个:  
  http://dotnet.aspx.cc/ShowDetail.aspx?id=8ADE535F-AD40-4DE3-A962-A64B4FAF12C4Top

2 楼noyester()回复于 2005-01-15 15:36:52 得分 0

可以的,他自带这个功能  
  不过也可以用模版列Top

3 楼luckyprg(lucky)回复于 2005-01-15 15:39:22 得分 0

当然可以,而且用模板还可以设计比较复杂的修改界面出来。Top

4 楼seesea125(执著)回复于 2005-01-15 15:54:54 得分 0

创建完全可编辑的   DataGrid  
  在论坛中我看到过许多相同或相似的问题:我怎样在我的DataGrid的每一行中放置检查框、文本框等等?怎样更新它们的值?答案相当简单,在这篇文章中,我将向你展示如何完成它。  
   
  我们都知道,DataGrid是一个功能非常强大的工具。根据我的经验,在90%以上的时间中,   DataGrid   都被用来显示数据,并可能一次编辑一行数据。     而某些时候,可能需要一次编辑多行,甚至是所有数据。一个实际的例子就是在网上销售物品的应用程序中,   顾客可能一次要变更他们篮子中的一种或多种物品,单击检查框移去他们不想要的商品。  
   
  构想  
   
  在这个例子中,我写了一个简单的WebForm来管理存储在XML中的联系人列表。   这个需求是非常简单的:具有添加新联系人,编辑/删除现有联系人的能力。用户可以一次修改或删除多个联系人,我也允许用户按他们选定的列来对数据网格进行排序。    
   
  我的例子是用   C#   编写的。   如果你更喜欢这些代码的VB版本,在下载文件中有这两种格式的代码。  
   
  Contacts.xml  
   
  这个例子中的   XML   数据文件非常简单直观。由于它非常简单,所以我没有创建规划。    
   
  <?xml   version="1.0"   standalone="yes"?>  
  <Contacts>  
      <Contact>  
          <Email>myaddress@mycompany.com</Email>  
          <FirstName>John</FirstName>  
          <LastName>Doe</LastName>  
      </Contact>  
      <Contact>  
          <Email>youraddress@yourcompany.com</Email>  
          <FirstName>Jane</FirstName>  
          <LastName>Doe</LastName>  
      </Contact>  
  </Contacts>  
   
  ContactList.aspx  
   
  设置   WebForm   非常简单。我放置了一个新的   DataGrid   到我的窗体中,并且设置它为4列,第一列都包含了用来删除联系人的检查框。你会注意到我在这里做的主要工作就是以模板列(   TemplateColumn)的形式创建了每一列。   这允许我放置文本框和检查框对象到数据模板(ItemTemplate)中   .   这是一个在网格每一行中显示文本以外的其它东西的技巧。   除此以外,你还会注意到我使用   FooterTemplate   来使新建联系人变得简单而直观。  
   
  我也包含了一个链接按钮(LinkButton),用来保存用户所做的修改及删除操作。但它并不用来添加新联系人。添加新联系人的操作由最后一列的页脚模板中链接按钮(LinkButton)来完成。  
   
  <asp:datagrid   id="dgContacts"   runat="server"   ShowFooter="True"   AllowSorting="True"   Forefont   color="Black"   GridLines="None"   CellPadding="2"   Backfont   color="LightGoldenrodYellow"   BorderWidth="1px"   Borderfont   color="Tan"   Width="499px"   AutoGenerateColumns="False"   DataKeyField="Email">  
      <SelectedItemStyle   Forefont   color="GhostWhite"   Backfont   color="DarkSlateBlue"></SelectedItemStyle>  
      <AlternatingItemStyle   Backfont   color="PaleGoldenrod"></AlternatingItemStyle>  
      <HeaderStyle   Font-Bold="True"   Backfont   color="Tan"></HeaderStyle>  
      <FooterStyle   Backfont   color="Tan"></FooterStyle>  
      <Columns>  
          <asp:TemplateColumn   SortExpression="FirstName"   HeaderText="First   Name">  
              <ItemTemplate>  
                  <asp:TextBox   id=First   runat="server"   Width="109px"   Text='<%#   DataBinder.Eval(Container,   "DataItem.FirstName")   %>'>  
                  </asp:TextBox>  
              </ItemTemplate>  
              <FooterTemplate>  
                  <asp:TextBox   id="NewFirst"   runat="server"   Width="109px"></asp:TextBox>  
              </FooterTemplate>  
          </asp:TemplateColumn>  
          <asp:TemplateColumn   SortExpression="LastName"   HeaderText="Last   Name">  
              <ItemTemplate>  
                  <asp:TextBox   id=Last   runat="server"   Width="109px"   Text='<%#   DataBinder.Eval(Container,   "DataItem.LastName")   %>'>  
                  </asp:TextBox>  
              </ItemTemplate>  
              <FooterTemplate>  
                  <asp:TextBox   id="NewLast"   runat="server"   Width="109px"></asp:TextBox>  
              </FooterTemplate>  
          </asp:TemplateColumn>  
          <asp:TemplateColumn   SortExpression="Email"   HeaderText="Email">  
              <ItemTemplate>  
                  <asp:TextBox   id=Email   runat="server"   Text='<%#   DataBinder.Eval(Container,   "DataItem.Email")   %>'>  
                  </asp:TextBox>  
              </ItemTemplate>  
              <FooterTemplate>  
                  <asp:TextBox   id="NewEmail"   runat="server"></asp:TextBox>  
              </FooterTemplate>  
          </asp:TemplateColumn>  
          <asp:TemplateColumn   HeaderText="Delete   Contact">  
              <ItemStyle   HorizontalAlign="Center"></ItemStyle>  
              <ItemTemplate>  
                  <asp:CheckBox   Runat="server"   ID="chkDelete"></asp:CheckBox>  
              </ItemTemplate>  
              <FooterStyle   HorizontalAlign="Center"></FooterStyle>  
              <FooterTemplate>  
                  <asp:LinkButton   Runat="server"   Text="Add"   CommandName="Add"   ID="Linkbutton1"   NAME="Linkbutton1"></asp:LinkButton>  
              </FooterTemplate>  
          </asp:TemplateColumn>  
      </Columns>  
  </asp:datagrid>  
   
   
   
  ContactList.cs  
   
  当我选择用XML文件来存取数据后,我就决定要使用DataSet来存取它。因为   DataSet   对象有   ReadXml   和   WriteXml   方法,所以这是非常合理的选择。第一步是在XML中读取数据。正如你从代码中所看到的,     我创建了一个成员用来处理数据排序。  
   
  private   DataSet   _dsContacts;  
  private   string   _sSort;  
   
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
      //   装载   XML   文件.  
      _dsContacts   =   new   DataSet();  
      _dsContacts.ReadXml(Server.MapPath("Contacts.xml"));  
      DataColumn[]   dcPk   =   {_dsContacts.Tables["Contact"].Columns["Email"]};  
      _dsContacts.Tables["Contact"].PrimaryKey   =   dcPk;  
   
      if   (!Page.IsPostBack   )  
      {  
          //   如果是第一次装载的话,绑定数据。  
          BindContacts();  
          _sSort   =   "FirstName";  
      }  
      else  
      {  
          //   否则,从视图状态中读取排序状态.  
          _sSort   =   (string)ViewState["Sort"];  
      }  
  }  
   
   
  第二步,我创建了一个用来绑定数据到网格的方法,它包含了数据排序逻辑以及从磁盘读取数据的方法。  
   
  private   void   BindContacts()  
  {  
      //   保存排序状态到视图状态中.  
      ViewState["Sort"]   =   _sSort;  
   
      //   绑定网格到已排序的数据视图中.  
      DataView   dv   =   new   DataView(_dsContacts.Tables["Contact"]);  
      dv.Sort   =   _sSort;  
      dgContacts.DataSource   =   dv;  
      dgContacts.DataBind();  
  }  
   
  private   void   SaveContacts()  
  {  
      _dsContacts.WriteXml(Server.MapPath("Contacts.xml"));  
  }  
   
  ItemCommand   事件用来处理向列表中添加新联系人。注意:我检查了     CommandName   参数是否为   Add.     它是来处理ASPX页中网格最后一列的页脚模板(FooterTemplate)中的链接按钮(LinkButton)的返回值。  
   
  private   void   dgContacts_ItemCommand(object   source   ,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
      //   添加新数据到   dataset.     这里我使用了数组以提高处理效率.  
      if   (e.CommandName   ==   "Add")  
      {  
          string[]   sContact   =   {"",   "",   ""};  
          sContact[0]   =   ((TextBox)e.Item.FindControl("NewEmail")).Text;  
          sContact[1]   =   ((TextBox)e.Item.FindControl("NewFirst")).Text;  
          sContact[2]   =   ((TextBox)e.Item.FindControl("NewLast")).Text;  
   
          _dsContacts.Tables["Contact"].Rows.Add(sContact);  
   
          SaveContacts();  
      }  
   
      BindContacts();  
  }  
   
  我跳过了   SortCommand   代码,因为有许多其它文档已经非常详细地讨论过如何排序了。   如果你下载了这个例子的源代码,它就包含在里面。  
   
  最后,我将窗体上链接按钮(LinkButton)的单击事件(onClick)移到了这里。     这里我通过循环检测DataGrid中的数据项来执行任何必需的删除及更新操作。  
   
  private   void   btnUpdate_Click(object   sender,   System.EventArgs   e)  
  {  
      //   循环处理每个数据项.  
      foreach   (DataGridItem   di   in   dgContacts.Items)  
      {  
          //   确信是数据项而不是页首或页尾.  
          if   (di.ItemType   ==   ListItemType.Item   ||   di.ItemType   ==   ListItemType.AlternatingItem)  
          {  
              //   取得更新或删除操作执行以后的当前行.  
              DataRow   dr   =   _dsContacts.Tables["Contact"].Rows.Find(dgContacts.DataKeys[di.ItemIndex]);  
   
              //   检查是否需要删除某行.  
              if   (((CheckBox)di.FindControl("chkDelete")).Checked)  
              {  
                  _dsContacts.Tables["Contact"].Rows.Remove(dr);//删除指定行  
              }  
              else  
              {  
                  //更新数据行.  
                  dr["Email"]   =   ((TextBox)di.FindControl("Email")).Text;  
                  dr["FirstName"]   =   ((TextBox)di.FindControl("First")).Text;  
                  dr["LastName"]   =   ((TextBox)di.FindControl("Last")).Text;  
              }  
          }  
      }  
   
        //   如果有变化则保存它.  
        if   (_dsContacts.HasChanges())  
      {  
          SaveContacts();  
      }  
   
      BindContacts();//绑定  
  }  
   
  结束语  
   
  我可以很容易地通过控件的位置找到控件中每一个   DataGridItem的单元(Cells)。   有多种方法可以实现它,   我确信你可以找到完成这项任务的更好的方法。正如你所看到的,   一次编辑整个数据网格是非常简单的。   同样的方法经过轻微的修改也可用于分页网格。    
   
  Top

5 楼jzflyaway(flyaway)回复于 2005-01-15 16:08:26 得分 0

当然能够!  
   
  DataGrid控件中有EditColumn这个属性!然后用OnEditCommand=“EditCommand_Click”  
  函数对这个事件进行编辑!Top

相关问题

  • 怎么在datagrid里实现就地编辑,修改数据呢?
  • 使用DataGrid模板进行数据修改但是不出现可编辑框
  • 我修改了datagrid某列编辑框的值,获取之后,存到数据库中的还是原来的,?/
  • DataGrid编辑数据的问题
  • datagrid的有编辑列可以做到修改数据,他还可以做到添加或删除列数据吗?
  • 能否通过程序编辑、修改数据库?
  • 数据窗口中的数据不能修改,编辑,怎么办?
  • DataGrid修改数据问题
  • 急~~~~ 请问为什么我在DataGrid中使用了模版列来做对DataGrid直接进行编辑 为什么他读出来的数据不是我修改的数据而是原来数据库的呢
  • 急~~~~ 请问为什么我在DataGrid中使用了模版列来做对DataGrid直接进行编辑 为什么他读出来的数据不是我修改的数据而是原来数据库的呢

关键词

  • 数据
  • 网格
  • datagrid
  • 模板
  • 修改
  • 排序
  • 视图
  • 检查
  • 代码
  • 控件

得分解答快速导航

  • 帖主:ujjcel
  • fokker

相关链接

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

广告也精彩

反馈

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