Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net中将一个gridview行传输到另一个gridview行_C#_Asp.net_Gridview - Fatal编程技术网

C# 如何在asp.net中将一个gridview行传输到另一个gridview行

C# 如何在asp.net中将一个gridview行传输到另一个gridview行,c#,asp.net,gridview,C#,Asp.net,Gridview,我有两个网格视图: gvdetails和 gvTranferRows gvdetails从所选数据库绑定。这些字段是: id moduleName和 项目字段 在gvTransferRows中,字段包括: id ModuleName 项目和 BatchNo BatchNo从dropdownlist中选择 但我想将所选行从gvdetails传输到gvtranfrows 在此过程中,我通过同时单击“删除”按钮,成功地将gvdetails所选行删除并添加到gvTranferRows,反之亦然

我有两个网格视图:

  • gvdetails
  • gvTranferRows
  • gvdetails
    从所选数据库绑定。这些字段是:

    • id

    • moduleName

    • 项目
      字段

    gvTransferRows
    中,字段包括:

    • id

    • ModuleName

    • 项目

    • BatchNo

    BatchNo
    dropdownlist
    中选择

    但我想将所选行从
    gvdetails
    传输到
    gvtranfrows

    在此过程中,我通过同时单击“删除”按钮,成功地将
    gvdetails
    所选行删除并添加到
    gvTranferRows
    ,反之亦然

    但在单击“删除”按钮后,它完成了第二次单击“添加”按钮的相同操作,
    gvdetails
    gridview将完全删除它,并将其传输到
    gvTransferRows

    我需要的是在“添加”按钮中选择“第二次”,它不会只删除选定的值,而是删除并传输到第二个gridview

    这是我为代码尝试的代码:

    .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>  
    
    
    

    使用临时数据表维护列表中选定的行或记录,然后使用数据表绑定辅助GridView

    你会从这里得到更多的想法


    请尝试DataTable.ImportRow方法:


    我在许多WebForms和MVC页面上使用这种方法,效果非常好。

    第一个网格中的所有数据都将发送到第二个网格,但是我们如何从第二个网格检索到第一个网格中的数据呢?我尝试过同样的代码,也将数据从第二个网格传输到第一个网格,但它不起作用。你能帮助我吗out@user123欢迎来到Stack溢流我对你的问题进行了编辑,以设置列表、内联代码和图像的格式,从而使其正确呈现-请参阅编辑帮助以获取有关格式设置的更多信息。祝你好运
          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 
    
    
            }