关闭

一次更新Datagrid 中多列数据

240人阅读 评论(0) 收藏 举报
 
在datagrid中一般我们只需一列列的更新数据,但有时需一次更新所有列中数据,提高数据编辑效率。
为了方便演示用xml文件做为数据源
xml文件:(UserInfo.xml)
<?xmlversion="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(); 
  }
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:775次
    • 积分:14
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章存档