2013-02-08 76 views
0

我有两个文本框三个按钮和两个网格视图,当我在textboex中输入值并按下数据表中添加按钮的值,可以看到网格视图,当我点击提交按钮我可以在我的下一个girdview中查看详细信息,当我从第1个网格视图中选择任何一行并单击删除按钮时,它将从第1个网格视图中删除该行,直到此时所有代码都能正常工作,现在我想要的是当我从第1行GridView和按下提交按钮,我可以查看第二个GridView控件只是数据存在于第一个GridView控件如何将数据从一个gridview复制到另一个

这里是我的代码:

private void BindGrid(int rowcount) 
{ 
    DataTable dt = new DataTable(); 
    DataRow dr; 

    dt.Columns.Add("First Name", typeof(String)); 
    dt.Columns.Add("Last Name", typeof(String)); 

    if (ViewState["CurrentData"] != null) 
    { 
     for (int i = 0; i < rowcount + 1; i++) 
     { 
      dt = (DataTable)ViewState["CurrentData"]; 
      if (dt.Rows.Count > 0) 
      { 
       dr = dt.NewRow(); 
       dr[0] = dt.Rows[0][0].ToString(); 

      } 
     } 
     dr = dt.NewRow(); 
     dr[0] = TextBox1.Text; 
     dr[1] = TextBox2.Text; 
     dt.Rows.Add(dr); 
    } 
    else 
    { 
     dr = dt.NewRow(); 
     dr[0] = TextBox1.Text; 
     dr[1] = TextBox2.Text; 


     dt.Rows.Add(dr); 

    } 

    // If ViewState has a data then use the value as the DataSource 
    if (ViewState["CurrentData"] != null) 
    { 
     GridView1.DataSource = (DataTable)ViewState["CurrentData"]; 
     GridView1.DataBind(); 

    } 
    else 
    { 
     // Bind GridView with the initial data assocaited in the DataTable 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 
    } 
    // Store the DataTable in ViewState to retain the values 
     ViewState["CurrentData"] = dt; 

} 
添加按钮

单击事件:

protected void Button1_Click(object sender, EventArgs e) 
    { 
     // Check if the ViewState has a data assoiciated within it. If 
     if (ViewState["CurrentData"] != null) 
     { 
      DataTable dt = (DataTable)ViewState["CurrentData"]; 
      int count = dt.Rows.Count; 
      BindGrid(count); 
     } 
     else 
     { 
      BindGrid(1); 
     } 
      TextBox1.Text = string.Empty; 
      TextBox2.Text = string.Empty; 
      TextBox1.Focus(); 
     } 
} 

提交按钮事件:

if (ViewState["CurrentData"] != null) 
     { 
      GridView2.DataSource = (DataTable)ViewState["CurrentData"]; 
      GridView2.DataBind(); 
     } 

删除按钮事件:

protected void DeleteButton_Click(object sender, EventArgs e) 
    { 

     foreach (GridViewRow row in GridView1.Rows) 
     { 
      CheckBox cb = (CheckBox)row.FindControl("CheckBox1"); 
      if (cb != null && cb.Checked) 
      { 
       row.Visible = false; 
      } 
      else 
      { 
       Response.Write("Select check box to Delete"); 
      } 
     } 
    } 

这是我的aspx页面代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
    <title></title> 
    </head> 
    <body> 
    <form id="form1" runat="server"> 
    <div> 
    <asp:TextBox ID="TextBox1" runat="server"/>&nbsp;&nbsp;&nbsp;&nbsp; 
    <asp:TextBox ID="TextBox2" runat="server"/>&nbsp;&nbsp;&nbsp;<asp:DropDownList 
       ID="DropDownList1" runat="server"> 
       <asp:ListItem>ADT</asp:ListItem> 
       <asp:ListItem>INF</asp:ListItem> 
       <asp:ListItem>SC</asp:ListItem> 
      </asp:DropDownList> 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    <asp:Button ID="Button1" runat="server" Text="Add" OnClick="Button1_Click" /> 
    &nbsp;&nbsp;&nbsp;&nbsp;<br /> 
      &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> 
      <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" 
      GridLines="None"> 
      <AlternatingRowStyle BackColor="White" /> 
      <EditRowStyle BackColor="#2461BF" /> 
      <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
      <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
       <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
      <RowStyle BackColor="#EFF3FB" /> 
      <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
      <SortedAscendingCellStyle BackColor="#F5F7FB" /> 
      <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 
      <SortedDescendingCellStyle BackColor="#E9EBEF" /> 
      <SortedDescendingHeaderStyle BackColor="#4870BE" /> 
      <Columns> 
      <asp:TemplateField> 
      <ItemTemplate> 
       <asp:CheckBox ID="CheckBox1" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 

     </asp:GridView> 

     <br /> 
     <asp:Button ID="btnSubmit" runat="server" onclick="btnSubmit_Click" 
      Text="Submit" /> 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <asp:Button ID="DeleteButton" runat="server" Text="Delete" 
       onclick="DeleteButton_Click" /> 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

      <br /> 
     <br /> 
     <asp:GridView ID="GridView2" runat="server" CellPadding="4" ForeColor="#333333" 
      GridLines="None"> 
      <AlternatingRowStyle BackColor="White" /> 
      <EditRowStyle BackColor="#2461BF" /> 
      <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
      <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
      <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
      <RowStyle BackColor="#EFF3FB" /> 
      <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
      <SortedAscendingCellStyle BackColor="#F5F7FB" /> 
      <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 
      <SortedDescendingCellStyle BackColor="#E9EBEF" /> 
      <SortedDescendingHeaderStyle BackColor="#4870BE" /> 
     </asp:GridView> 
     </div> 
    </form> 
</body> 
</html> 

提前致谢。 ..

+0

@gzaxx感谢你能帮助我在此 – amitesh

回答

1

首先,您不是从DataTable删除数据,而只是在DataGridView1中隐藏行。

如果你想删除它,然后在你的删除事件做到这一点:

var dt = (DataTable)ViewState["CurrentData"]; 
if (dt != null) 
{ 
    var firstname = (row.FindControl("labelFirstName") as Label).Text; //my guess that you are binding DataRows to labels in grid view? if not this has to be changed 
    var lastname = (row.FindControl("labelLastName") as Label).Text; //same as above 

    var row = dt.AsEnumerable().FirstOrDefault(x => x.Field<string>("First Name") == firstname && x.Field<string>("Last Name") == lastname); 

    dt.Rows.Remove(row);  

    GridView1.DataSource = dt; 
    GridView1.DataBind(); 

    GridView2.DataSource = dt; 
    GridView2.DataBind(); 

    ViewState["CurrentData"] = dt; 
} 

这就是你如何从数据表中删除一行。

但是,如果您只想隐藏它们,则必须在DataGridView2中找到具有相同数据的行并将其隐藏起来。

foreach (GridViewRow row in GridView1.Rows) 
{ 
    CheckBox cb = (CheckBox)row.FindControl("CheckBox1"); 
    if (cb != null && cb.Checked) 
    { 
     row.Visible = false; 
     var firstname = (row.FindControl("labelFirstName") as Label).Text; //my guess that you are binding DataRows to labels in grid view? if not this has to be changed 
     var lastname = (row.FindControl("labelLastName") as Label).Text; //same as above 

     foreach (GridViewRow row in GridView2.Rows) 
     { 
      var found = false; 
      // logic to search for row 
      if (found) 
      { 
        row.Visible = false; 
      } 
     } 
    } 
    else 
    { 
     Response.Write("Select check box to Delete"); 
    } 
} 

我希望我正确理解你的问题,那就是你想要的:)。如果不是,请写评论,我会进一步帮助:)


这一个应该工作。

protected void DeleteButton_Click(object sender, EventArgs e) 
{ 
    var dt = (DataTable)ViewState["CurrentData"]; 

    if (dt == null) 
    { 
     return; 
    } 

    List<DataRow> rowsToDelete = new List<DataRow>(); 
    foreach (GridViewRow row in GridView1.Rows) 
    {   
     CheckBox cb = (CheckBox)row.FindControl("CheckBox1"); 
     if (cb != null && cb.Checked) 
     { 
      row.Visible = false; 

      //remove row by its index as it should GridViewRow index == DataRow index 
      //it is not the best way but from your code I dont have information how your GridView looks 
      rowsToDelete.Add(dt.Rows[row.RowIndex]); 
     } 
     else 
     { 
      Response.Write("Select check box to Delete"); 
     } 
    } 

    for (int i = 0; rowsToDelete.Count; i++) 
    { 
     dt.Rows.Remove(rowsToDelete[i]); 
    } 
} 

这个编辑是正确的,最后一个没有这么多,忽略了可能有更多的行被删除:)。

要更改DataBound GridView中的数据,您必须修改它的DataSource而不是GridView本身!这就是为什么你必须从你的DataTable删除项目,并重新绑定数据源的变化发生在双方你网格:)的

+0

让我送U我的aspx页面,然后你也会明白 – amitesh

+0

现在多数民众赞成我的整个代码可以帮助我这个@ gzaxx – amitesh

+0

即时通讯不使用脚本我只是做了一个简单的网页,没有数据库使用数据表和gridview – amitesh

相关问题