2013-02-08 102 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

相關問題