一次更新Datagrid 中多列数据

 
在datagrid中一般我们只需一列列的更新数据,但有时需一次更新所有列中数据,提高数据编辑效率。
为了方便演示用xml文件做为数据源
xml文件:(UserInfo.xml)
<? xml version ="1.0" standalone ="yes"?>
< UserInfos >
 <UserInfo>
    <Email>some@you.net</Email>
    <Name>me</Name>
    <TEL>0123456</TEL>
 </UserInfo>
 <UserInfo>
    <Email>youraddress@you.com</Email>
    <Name>he</Name>
    <TEL>7894563</TEL>
 </UserInfo>
 <UserInfo>
    <Email>youraddress@you.com</Email>
    <Name>222</Name>
    <TEL>123342</TEL>
 </UserInfo>
 <UserInfo>
    <Email>youraddress@you.com</Email>
    <Name>haha</Name>
    <TEL>3545445</TEL>
 </UserInfo>
   <UserInfo>
    <Email>youraddress@you.com</Email>
    <Name>sam</Name>
    <TEL>879563</TEL>
 </UserInfo>
</ UserInfos >
页面代码:
<form id="Form1" method="post" runat="server">
                     <asp:DataGrid id="DGrid" runat="server" ShowFooter="True" GridLines="None" CellPadding="2" AutoGenerateColumns="False">
                            <HeaderStyle Font-Bold="True"></HeaderStyle>
                            <Columns>
                                   <asp:TemplateColumn HeaderText="名字">
                                          <ItemTemplate>
                                                 <asp:TextBox id=Name runat="server" Width="109px" Text='<%# DataBinder.Eval(Container, "DataItem.Name") %>'>
                                                 </asp:TextBox>
                                          </ItemTemplate>
                                          <FooterTemplate>
                                                 <asp:TextBox id="NewName" runat="server" Width="109px"></asp:TextBox>
                                          </FooterTemplate>
                                   </asp:TemplateColumn>
                                   <asp:TemplateColumn HeaderText="电话">
                                          <ItemTemplate>
                                                 <asp:TextBox id=TEL runat="server" Width="109px" Text='<%# DataBinder.Eval(Container, "DataItem.TEL") %>'>
                                                 </asp:TextBox>
                                          </ItemTemplate>
                                          <FooterTemplate>
                                                 <asp:TextBox id="NewTEL" runat="server" Width="109px"></asp:TextBox>
                                          </FooterTemplate>
                                   </asp:TemplateColumn>
                                   <asp:TemplateColumn 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="删除">
                                          <ItemStyle HorizontalAlign="Center"></ItemStyle>
                                          <ItemTemplate>
                                                 <asp:CheckBox Runat="server" ID="chkDelete"></asp:CheckBox>
                                          </ItemTemplate>
                                          <FooterStyle HorizontalAlign="Center"></FooterStyle>
                                          <FooterTemplate>
                                                 <asp:LinkButton Runat="server" Text="增加" CommandName="Add" ID="Linkbutton1"></asp:LinkButton>
                                          </FooterTemplate>
                                   </asp:TemplateColumn>
                            </Columns>
                     </asp:DataGrid>
                     <asp:Button id="btnUpdate" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 208px" runat="server"
                            Text="更新"></asp:Button>
              </form>
后台代码:
         private DataSet dsUser;//定义dsUser
         private void Page_Load(object sender, System.EventArgs e) 
         { 
              // 读取XML 文件.到dataset中
              dsUser = new DataSet(); 
              dsUser.ReadXml(Server.MapPath("UserInfo.xml")); 
              if (!Page.IsPostBack ) 
              {  
                   BindData();  
              } 
         } 
         private void BindData() 
         { 
              // datagrid绑定dataset
              DataView dv = new DataView(dsUser.Tables["UserInfo"]); 
              DGrid.DataSource = dv; 
              DGrid.DataBind(); 
         } 
        //把dataset保存到xml文件
         private void Save() 
         { 
              dsUser.WriteXml(Server.MapPath("UserInfo.xml")); 
         }  
         private void DGrid_ItemCommand(object source , System.Web.UI.WebControls.DataGridCommandEventArgs e) 
         {   
              //增加一行到dataset中。使用了arrary结构
              if (e.CommandName == "Add") 
              { 
                   string[] sUser = {"", "", ""}; 
                   sUser[0] = ((TextBox)e.Item.FindControl("NewEmail")).Text; 
                   sUser[1] = ((TextBox)e.Item.FindControl("NewName")).Text; 
                   sUser[2] = ((TextBox)e.Item.FindControl("NewTEL")).Text; 
 
                   dsUser.Tables["UserInfo"].Rows.Add(sUser); 
 
                   Save(); 
              } 
 
              BindData(); 
         }  
         private void btnUpdate_Click(object sender, System.EventArgs e) 
         { 
              // 遍历datagrid中所有列. 
              foreach (DataGridItem di in DGrid.Items) 
              { 
                   //不遍历datagrid中的 header or footer.  
                   if (di.ItemType == ListItemType.Item || di.ItemType == ListItemType.AlternatingItem) 
                   { 
 
                       DataRow dr = dsUser.Tables["UserInfo"].Rows.Find(DGrid.DataKeys[di.ItemIndex]); 
 
                       // 如果删除被选中. 
                       if (((CheckBox)di.FindControl("chkDelete")).Checked) 
                       { 
                            dsUser.Tables["UserInfo"].Rows.Remove(dr); 
                       } 
                       else 
                       { 
                            // 更新
                            dr["Email"] = ((TextBox)di.FindControl("Email")).Text; 
                            dr["Name"] = ((TextBox)di.FindControl("Name")).Text; 
                            dr["TEL"] = ((TextBox)di.FindControl("TEL")).Text; 
                       } 
                   } 
              } 
 
              // 如果有改动
              if (dsUser.HasChanges()) 
              { 
                   Save(); 
              } 
 
              BindData(); 
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值