簡體   English   中英

動態地將行添加到GridView,其中包含ASP.NET中的Web控件

[英]Dynamically add rows to GridView which contain web controls in ASP.NET

嗨,我遇到了一個很大的問題,因為我不知道從哪里開始。 我需要創建一個Gridview,其下方必須具有按鈕,“創建行”按鈕和“刪除行”按鈕。 我希望每次按下“創建行”按鈕時都將新行添加到GridView,但是主要問題是我需要用不同的控件(例如DropDownLists和TextBox)填充新行,但是我不知道如何正確地做。 這是我想要GridView的圖像:

每行有2個下拉列表,兩個文本框和一個按鈕 在此處輸入圖片說明

我知道我需要將GridView綁定到數據源(例如dataTable),但是我不知道它是否可以與TextBox或DropDownLists等控件一起使用。 很抱歉,如果我不添加任何代碼,因為我真的不知道從哪里開始。 謝謝。

如果我理解正確,那么您可以遵循以下步驟:

  1. 創建Gridview

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound" OnRowCommand="GridView1_RowCommand" DataKeyNames="RowNumber"> <Columns> <asp:BoundField DataField="RowNumber" HeaderText="Row Number" Visible="false" /> <asp:TemplateField HeaderText="Select" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle"> <ItemTemplate> <asp:CheckBox runat="server" ID="chkSelect" ToolTip="Select To Delete This Row" /> <asp:Label runat="server" ID="lblId" Text='<%# Bind("Id") %>' Visible="false"></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="First Entry"> <ItemTemplate> <asp:Label runat="server" ID="lblFirstEntry" Visible="false" Text='<%# Eval("FirstEntry") %>'></asp:Label> <asp:DropDownList ID="ddlFirstEntry" runat="server" ClientIDMode="Static" CssClass="ddlFirstEntry"> </asp:DropDownList> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Second Entry"> <ItemTemplate> <asp:Label runat="server" ID="lblSecondEntry" Visible="false" Text='<%# Eval("SecondEntry") %>'></asp:Label> <asp:DropDownList ID="ddlSecondEntry" runat="server" ClientIDMode="Static" CssClass="ddlSecondEntry"> </asp:DropDownList> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="First Text Box"> <ItemTemplate> <asp:Label runat="server" ID="lblFirstTextBox" Visible="false"></asp:Label> <asp:TextBox ID="txtFirstTextBox" runat="server" Text='<%# Eval("FirstTextBox") %>' CssClass="txtFirstTextBox"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Second Text Box"> <ItemTemplate> <asp:Label runat="server" ID="lblSecondTextBox" Visible="false"></asp:Label> <asp:TextBox ID="txtFSecondTextBox" runat="server" Text='<%# Eval("SecondTextBox") %>' CssClass="txtSecondTextBox"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Second Text Box"> <ItemTemplate> <asp:Button ID="btnSubmit" runat="server" Text="Button" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> 

  1. 然后在Page_Load后面的代碼中調用此方法

     private void InitializeGrid() { try { ViewState["applicationDetail"] = null; DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[] { new DataColumn("Id", typeof(int)), new DataColumn("FirstEntry", typeof(string)), new DataColumn("SecondEntry",typeof(string)), new DataColumn("FirstTextBox", typeof(string)), new DataColumn("SecondTextBox", typeof(string)) }); DataRow drRow = dt.NewRow(); drRow["Id"] = 1; drRow["FirstEntry"] = string.Empty; drRow["SecondEntry"] = string.Empty; drRow["FirstTextBox"] = string.Empty; drRow["SecondTextBox"] = string.Empty; dt.Rows.Add(drRow); ViewState["applicationDetail"] = dt; GridView1.DataSource = ViewState["applicationDetail"]; } catch (Exception ex) { throw; } } 

InitializeGrid();

GridView1.DataBind();

在GridView1_RowDataBound上綁定所有下拉控件

到此為止,將創建一個帶有一行空行的網格。

  1. 現在在添加按鈕上,單擊執行以下操作

     protected void btnNewRow_Click(object sender, EventArgs e) { try { AddNewRowToGrid(); } catch (Exception ex) { throw ex; } } private void AddNewRowToGrid() { try { int rowIndex = 0; if (ViewState["applicationDetail"] != null) { DataTable dtCurrentTable = (DataTable)ViewState["applicationDetail"]; DataRow drCurrentRow = null; if (dtCurrentTable.Rows.Count > 0) { for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) { //extract the TextBox values _lblGuestId DropDownList ddl1 = GridView1.Rows[rowIndex].FindControl("ddlFirstEntry") as DropDownList; DropDownList ddl2 = GridView1.Rows[rowIndex].FindControl("ddlSecondEntry") as DropDownList; TextBox txt1 = GridView1.Rows[rowIndex].FindControl("txtFirstTextBox") as TextBox; TextBox txt2 = GridView1.Rows[rowIndex].FindControl("txtSecondTextBox") as TextBox; drCurrentRow = dtCurrentTable.NewRow(); drCurrentRow["RowNumber"] = i + 1; dtCurrentTable.Rows[i - 1]["FirstEntry"] = ddl1.SelectedValue; dtCurrentTable.Rows[i - 1]["SecondEntry"] = ddl2.SelectedValue; dtCurrentTable.Rows[i - 1]["FirstTextBox"] = txt1.Text; dtCurrentTable.Rows[i - 1]["SecondTextBox"] = txt2.Text; rowIndex++; } dtCurrentTable.Rows.Add(drCurrentRow); ViewState["applicationDetail"] = dtCurrentTable; GridView1.DataSource = dtCurrentTable; GridView1.DataBind(); } } else { Response.Write("ViewState is null"); } //Set Previous Data on Postbacks SetPreviousData(); } catch (Exception ex) { throw ex; } } private void SetPreviousData() { try { int rowIndex = 0; if (ViewState["applicationDetail"] != null) { DataTable dtCurrentTable = (DataTable)ViewState["applicationDetail"]; if (dtCurrentTable.Rows.Count > 0) { for (int i = 0; i < dtCurrentTable.Rows.Count; i++) { DropDownList ddl1 = GridView1.Rows[rowIndex].FindControl("ddlFirstEntry") as DropDownList; DropDownList ddl2 = GridView1.Rows[rowIndex].FindControl("ddlSecondEntry") as DropDownList; TextBox txt1 = GridView1.Rows[rowIndex].FindControl("txtFirstTextBox") as TextBox; TextBox txt2 = GridView1.Rows[rowIndex].FindControl("txtSecondTextBox") as TextBox; ddl1.SelectedValue = dtCurrentTable.Rows[i]["FirstEntry"].ToString(); ddl2.SelectedValue = dtCurrentTable.Rows[i]["SecondEntry"].ToString(); txt1.Text = dtCurrentTable.Rows[i]["FirstTextBox"].ToString(); txt2.Text = dtCurrentTable.Rows[i]["SecondTextBox"].ToString(); rowIndex++; } } } } catch (Exception ex) { throw ex; } } 
  2. 刪除中

在GridView1_RowCommand上,選中此復選框時,將獲取所有選中的復選框行的行索引,並將其保留在某個會話或應用程序變量中。

在刪除按鈕上,單擊使用該變量刪除行。

希望您的問題能得到解決。

根據您的評論,我正在添加GridView1_RowDataBound用於下拉綁定

    protected void GridView1_RowDataBound(object sender,  GridViewRowEventArgs e)
    {
        try
        {
            DropDownList ddl1 = (e.Row.FindControl("ddlFirstEntry") as DropDownList);
            Label lbl1 = (e.Row.FindControl("lblFirstEntry") as Label);

            DropDownList ddl2 = (e.Row.FindControl("ddlSecondEntry") as DropDownList);
            Label lbl2 = (e.Row.FindControl("lblSecondEntry") as Label);                


            ddl1.Items.Clear();
            ddl1.AppendDataBoundItems = true;
            ddl1.Items.Add(new ListItem("-Select-", "-1"));

            ddl1.DataSource = ViewState["ddl1datasourse"];
            ddl1.DataTextField = "Value";
            ddl1.DataValueField = "Id";
            ddl1.DataBind();
            if (ddl1.SelectedValue != string.Empty && lbl1.Text != null)
                ddl1.SelectedValue = lbl1.Text.Trim();
            else
                ddl1.SelectedValue = "-1";

            ddl2.Items.Clear();
            ddl2.AppendDataBoundItems = true;
            ddl2.Items.Add(new ListItem("-Select-", "-1"));

            ddl2.DataSource = ViewState["ddl2datasourse"];
            ddl2.DataTextField = "Value";
            ddl2.DataValueField = "Id";
            ddl2.DataBind();
            if (ddl2.SelectedValue != string.Empty && lbl2.Text != null)
                ddl2.SelectedValue = lbl2.Text.Trim();
            else
                ddl2.SelectedValue = "-1";

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM