2016-04-12 9 views
0

に別のGridViewの行に1つのGridViewの行を転送することができます私は2つのグリッドビューがあります。はどのように私はasp.net

  1. gvdetails
  2. gvTranferRows

gvdetailsを選択したデータベースから、バインドされています。フィールドは次のとおりです。

  • id

  • moduleName

  • Itemフィールド。 gvTransferRows分野において

ある:

  • id

  • ModuleName

  • Item

  • BatchNo

BatchNoは、dropdownlistから選択される。

しかし、選択した行をgvdetailsからgvTranferRowsに転送したいとします。

このプロセスでは、削除ボタンを同時にクリックすると、gvTranferRowsに選択された行が削除され、追加されました。

しかし、削除ボタンをクリックした後、同じ操作をもう一度追加ボタンをクリックすると、gvdetailsグリッドビューは完全に削除されます。gvTransferRowsに転送されます。

私が必要とするのは、追加ボタンで2番目の時間を選択することです。選択した値だけを削除せず、2番目のグリッドビューに転送します。

これは私がコードを試したコードです:

.aspxの:

<table align="center"> 
       <tr> 
        <td class="auto-style2"></td> 
        <td class="auto-style1"> 
         <asp:DropDownList ID="ddlbatchno" runat="server" Height="16px" Width="131px"> 
         </asp:DropDownList> 
        </td> 
       </tr> 
       <tr> 
        <td class="auto-style2"></td> 
       </tr> 
       <tr> 
        <td class="auto-style2" valign="top"> 
         <asp:GridView ID="gvDetails" runat="server" DataKeyNames="ModuleName" AutoGenerateColumns="false" CellPadding="5"> 
          <Columns> 
           <asp:TemplateField> 
            <ItemTemplate> 
             <asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="true" /> 
            </ItemTemplate> 
           </asp:TemplateField> 
           <asp:BoundField DataField="id" HeaderText="id" /> 
           <asp:BoundField DataField="ModuleName" HeaderText="ModuleName" /> 
           <asp:BoundField DataField="Item" HeaderText="Item" /> 
            <asp:BoundField DataField="BatchNo" HeaderText="BatchNo" /> 

          </Columns> 
          <HeaderStyle BackColor="#6699ff" Font-Bold="true" ForeColor="White" /> 
         </asp:GridView> 
        </td> 
        <td class="auto-style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
         <asp:Button ID="btnAdd" runat="server" OnClick="btnAdd_Click" Text="ADD" /> 
         <br /> 
         <label> 
         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;<br /> 
         <br /> 
         </label> 
         <br /> 
         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
         <asp:Button ID="btnRemove" runat="server" OnClick="btnRemove_Click" Text="Remove" /> 
         <br /> 
         <label> 
         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt;</label> </td> 
        <td valign="top"> 
         <asp:GridView ID="gvTranferRows" runat="server" DataKeyNames="ModuleName" AutoGenerateColumns="false" CellPadding="5" EmptyDataText="No Records Found"> 
          <Columns> 
           <asp:TemplateField> 
            <ItemTemplate> 
             <asp:CheckBox ID="chkSelect2" runat="server" AutoPostBack="true" /> 
            </ItemTemplate> 
           </asp:TemplateField> 
           <asp:BoundField DataField="id" HeaderText="id" /> 
           <asp:BoundField DataField="ModuleName" HeaderText="ModuleName" /> 
           <asp:BoundField DataField="Item" HeaderText="Item" /> 
           <asp:BoundField DataField="BatchNo" HeaderText="BatchNo" /> 
          </Columns> 
          <HeaderStyle BackColor="#6699ff" Font-Bold="true" ForeColor="White" /> 
         </asp:GridView> 
         <br /> 

        </td> 
       </tr> 
      </table> 

は.csページ:

 protected void Page_Load(object sender, EventArgs e) 
      { 
       if (!IsPostBack) 
       { 
        ddlbatch(); 
        BindGridview(); 
        BindSecondGrid(); 
       } 
      } 
public void ddlbatch() 
     { 
      SqlCommand cmd1 = new SqlCommand("Select BatchNo from Batches", con); 
      cmd1.CommandType = CommandType.Text; 
      cmd1.Connection = con; 
      con.Open(); 

      ddlbatchno.DataSource = cmd1.ExecuteReader(); 
      ddlbatchno.DataTextField = "BatchNo"; 
      ddlbatchno.DataBind(); 
      con.Close(); 
      ddlbatchno.Items.Insert(0, new ListItem("--Select batche no--", "0")); 
     } 

     protected void BindGridview() //Binding gvDetaails gridview 
     { 

      SqlDataAdapter da = new SqlDataAdapter("select id,ModuleName,Item,BatchNo from ModuleItems", con); 
      DataTable dt = new DataTable(); 

      da.Fill(dt); 
      ViewState["dt"] = dt; 
      ViewState["dt1"] = dt; 
      gvDetails.DataSource = dt; 
      gvDetails.DataBind(); 
     } 



     protected void BindSecondGrid() // binding gvtransfer gridview 
     { 
      DataTable dt = (DataTable)ViewState["GetRecords"]; 
      gvTranferRows.DataSource = dt; 
      gvTranferRows.DataBind(); 

     } 

     string name; 
    protected void btnAdd_Click(object sender, EventArgs e) 
     { 
      foreach (GridViewRow row in gvDetails.Rows) 
      { 
       if (row.RowType == DataControlRowType.DataRow) 
       { 
        CheckBox chkRow = (row.Cells[0].FindControl("chkSelect") as CheckBox); 
        if (chkRow.Checked) 
        { 

         int totalCount = gvDetails.Rows.Cast<GridViewRow>().Count(r => ((CheckBox)r.FindControl("chkSelect")).Checked); 

         name += row.Cells[1].Text + ","; 

        } 
       } 
      } 
      string[] name3 = name.Split(','); 

      for (int l = 0; l < name3.Length; l++) 
      { 

       string str = "UPDATE ModuleItems SET BatchNo = " + ddlbatchno.SelectedItem.ToString() + " WHERE id= '" + name3[l] + "'"; 

       SqlCommand cmd = new SqlCommand(str, con); 
       con.Open(); 

       int j = cmd.ExecuteNonQuery(); 
       con.Close(); 
      } 
      foreach (GridViewRow oItemLeft in gvDetails.Rows) 
      { 
       if (((CheckBox)oItemLeft.FindControl("chkSelect")).Checked) 
       { 
        GetSelectedRows(); 
        BindSecondGrid(); 
        break; 
       } 

      } 

      DataTable dt = ViewState["dt"] as DataTable; //2nd time adding gvdetails to gvtransfer dt will become null 

      if (dt != null) 
      { 
       for (int i = dt.Rows.Count - 1; i >= 0; i--) 
       { 

        DataRow row = dt.Rows[i]; 
        string dtname = row["id", DataRowVersion.Original].ToString(); 
        string[] name1 = name.Split(','); 
        for (int l = 0; l < name1.Length; l++) 
        { 
         string name2 = name1[l].ToString(); 
         if (dtname == name2) 
         { 
          row.Delete(); 

         } 
        } 

       } 
      } 


      ViewState["dt"] = dt; 

      gvDetails.DataSource = dt; 
      gvDetails.DataBind(); 
     } 
     private void GetSelectedRows() 
     { 
      DataTable dt; 
      if (ViewState["GetRecords"] != null) 
       dt = (DataTable)ViewState["GetRecords"]; 
      else 
       dt = CreateTable(); 
      for (int i = 0; i < gvDetails.Rows.Count; i++) 
      { 
       CheckBox chk = (CheckBox)gvDetails.Rows[i].Cells[0].FindControl("chkSelect"); 
       if (chk.Checked) 
       { 
        dt = AddGridRow(gvDetails.Rows[i], dt); 
       } 

      } 
      ViewState["GetRecords"] = dt; 
     } 
     private DataTable CreateTable() 
     { 

      DataTable dt = new DataTable(); 
      dt.Columns.Add("id"); 
      dt.Columns.Add("ModuleName"); 
      dt.Columns.Add("Item"); 
      dt.Columns.Add("BatchNo"); 

      dt.AcceptChanges(); 
      return dt; 
     } 

     private DataTable AddGridRow(GridViewRow gvRow, DataTable dt) 
     { 
      DataRow[] dr = dt.Select("id = '" + gvRow.Cells[1].Text + "'"); 
      if (dr.Length <= 0) 
      { 
       dt.Rows.Add(); 
       int rowscount = dt.Rows.Count - 1; 
       dt.Rows[rowscount]["id"] = gvRow.Cells[1].Text; 
       dt.Rows[rowscount]["ModuleName"] = gvRow.Cells[2].Text; 
       dt.Rows[rowscount]["Item"] = gvRow.Cells[3].Text; 
       dt.Rows[rowscount]["BatchNo"] = ddlbatchno.SelectedItem.Text; 
       dt.AcceptChanges(); 


      } 
      return dt; 
     } 

     protected void btnRemove_Click(object sender, EventArgs e) 
     { 

      if (gvTranferRows.Rows.Count > 0) 
      { 
       foreach (GridViewRow row in gvTranferRows.Rows) 
       { 
        if (row.RowType == DataControlRowType.DataRow) 
        { 
         CheckBox chkRow1 = (row.Cells[0].FindControl("chkSelect2") as CheckBox); 
         if (chkRow1.Checked) 
         { 

          int totalCount = gvTranferRows.Rows.Cast<GridViewRow>().Count(r => ((CheckBox)r.FindControl("chkSelect2")).Checked); 

          name += row.Cells[1].Text + ","; 
         } 
        } 
       } 
       string[] name3 = name.Split(','); 
       foreach (GridViewRow oItemLeft in gvTranferRows.Rows) 
       { 
        if (((CheckBox)oItemLeft.FindControl("chkSelect2")).Checked) 
        { 
         GetRemoveRows(); 

         BindGridview(); 
         //break; 
        } 

       } 
       DataTable dt = ViewState["dt"] as DataTable; 
       for (int i = dt.Rows.Count - 1; i >= 0; i--) 
       { 

        DataRow row = dt.Rows[i]; 
        string dtname = row["id", DataRowVersion.Original].ToString(); 
        string[] name1 = name.Split(','); 
        for (int l = 0; l < name1.Length; l++) 
        { 
         string name2 = name1[l].ToString(); 
         if (dtname != name2) 
         { 
          row.Delete(); 

         } 
        } 

       } 


       ViewState["dt"] = dt; 

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

      } 
     } 


     DataTable dt,dt1; 

     private void GetRemoveRows() 
     { 


      if (ViewState["GetRecords"] != null) 
       dt = (DataTable)ViewState["GetRecords"]; 

       ViewState["GetRecords"] = dt; 
       ViewState["GetRecords2"] = dt; 
       gvDetails.DataSource = dt; 
       gvDetails.DataBind(); 
      this. ViewState.Remove("GetRecords2"); //for viewstate control 

      ViewState["GetRecords2"] = null;//for variables 


     } 

をどのように結果が意志私は私の結果画像を添付していますプロセス。私は誰も私を助けてください私のコードの完全な投稿した。

img

+0

ようこそスタックオーバーフロー!私はあなたの質問を編集して、リスト、インラインコード、イメージを適切にレンダリングするように編集しました。フォーマットの詳細については、編集ヘルプを参照してください。がんばろう! – Wtower

答えて

0

リスト選択された行またはレコードを維持し、その後、二次のGridViewをバインドするためのDataTableを使用するために、一時的なデータテーブルを使用しています。 UがDataTable.ImportRowてみてください方法 Transfer Selected Rows from one GridView to Another in Asp.net

Another way to transfer data

+0

最初のグリッドからのすべてのデータは2番目のグリッドに送信されますが、2番目のグリッドから最初のグリッドにデータを取得する方法 –

+0

同じコードでも2番目のグリッドから最初のグリッドにデータを転送しようとしましたが、助けてください –

+0

@ user123 http://www.codescratcher.com/windows-forms/transfer-selected-rows-one-gridview-another-gridview/ –

0

ここからより多くのアイデアを取得します

:私は多くのWebフォームとMVCページにこの方法を使用してい

DataTable.ImportRow() on MSDN

それは素晴らしい作品です。