簡體   English   中英

如何動態創建gridview(Itemcommand和DeleteCommand),按鈕和文本框並處理單擊事件

[英]How can I create a gridview(Itemcommand and deletecommand), button and textbox dynamically and handle click events

我將要開發一個Web應用程序,用於根據我們在文本框中輸入的條件從數據庫中搜索和獲取數據。

一旦我們在任一文本框中輸入數據並單擊搜索按鈕,我便會從一個地方到另一個地方,它將從數據庫中獲取數據並顯示在文本框中(動態)。

例如:

如果我輸入一個地方kolkata ,然后按Enter鍵,它將計算具有來源kolkatta的記錄kolkatta 如果count是3,則應動態創建3個文本框,3個按鈕(添加)和3個gridview。 然后,如果單擊添加按鈕,它將重定向到下一頁。

我已經創建了一個文本框和一個按鈕,但是無法創建3個gridview,並且該按鈕未觸發的click事件。

這是我在搜索按鈕單擊時動態創建控件的代碼:

protected void BTNSearch_Click(object sender, EventArgs e)
{
            if(Convert.ToInt32( Session["Count"])>0)
            {
                if (Flag != "")
                {
                    LoadControls(Flag);
                }
            }
}

private void LoadControls(string Flag)
{
            LocationName.Clear();
            Session["Flag"] = Flag;
            Updatesearch.Update();
            dynamicTextBoxes = new TextBox[Convert.ToInt32(Session["Count"])];
            dynamicButtons = new Button[Convert.ToInt32(Session["Count"])];
            dynamicGV = new GridView[Convert.ToInt32(Session["Count"])];
            int i;

            if (Flag == "L")
            {
                sql = "Select PortOfDischargeName from VW_TransAIHBLMasterUpdateDetails  where tBLG_NUIsActive=1 and PortOfLoadName='" + Session["Loading"].ToString() + "' group by  PortOfDischargeName";
            }
            else if (Flag == "D")
            {
                sql = "Select PortOfLoadName from VW_TransAIHBLMasterUpdateDetails  where tBLG_NUIsActive=1 and PortOfDischargeName='" + Session["Destination"].ToString() + "' group by  PortOfLoadName";
            }
            else
            {
                sql = "";
            }

            SqlDataReader rdr = mobjGenlib.objDBLib.ExecuteQueryReader(sql.ToString());

            while (rdr.Read())
            {
                LocationName.Add(rdr.GetValue(0).ToString());
            }

            rdr.Close();

            for (i = 0; i < Convert.ToInt32(Session["Count"]); i += 1)
            {
                TextBox textBox = new TextBox();
                textBox.ID = "myTextBox" + i.ToString();
                textBox.Width = 200;
                textBox.Height = 15;
                //textBox.Text = String.Empty;
                textBox.Text = LocationName[i].ToString();
                textBox.BackColor = System.Drawing.Color.AliceBlue;
                myPlaceHolder.Controls.Add(textBox);
                dynamicTextBoxes[i] = textBox;

                var button = new Button();
                button.ID = "BtnAdd" + i.ToString();
                button.Text = "Add";
                //button.Click += button_Click;
                button.Click += new System.EventHandler(button_click);
               //btn.Click += new EventHandler(btn_Click);    
                myPlaceHolder.Controls.Add(button);
                dynamicButtons[i] = button;
                ViewState["Btn"] = dynamicButtons[i];

                LiteralControl literalBreak = new LiteralControl("<br />"); 
                myPlaceHolder.Controls.Add(literalBreak);

        gv.ID = "gridview" + i;
                myPlaceHolder.Controls.Add(gv);
                dynamicGV[i] = gv;
                BindGrid(textBox.Text, Flag, i);

                LiteralControl literalBreak1 = new LiteralControl("<br />");
                myPlaceHolder.Controls.Add(literalBreak1);
            }
}

這是用於按鈕單擊:

protected void button_click(object sender, EventArgs e)
{
            Button btn = (Button)sender;

            foreach (Button bt in dynamicButtons)
            {
                for (int i = 0; i < Convert.ToInt32(Session["Count"]); i++)
                {
                    if (btn.ID == ("BtnAdd" + i))
                    {
                        Response.Redirect("FrmTransLCLConsolidation.aspx");
                        break;
                    }
                }
            }
}

**

>我不知道如何向Datagrid onitemcommand和ondeletecommand編寫代碼。

**

誰能幫助我實現這一目標? 提前致謝。

在此處輸入圖片說明

另一個問題: 在此處輸入圖片說明

aspx頁面:

 <asp:Repeater runat="server" OnItemDataBound="repeaterSearchResult_ItemDataBound" ID="repeaterSearchResult">
                                <ItemTemplate>
                                    <asp:Label ID="textBoxSearch"  ForeColor="White" width="25%" runat="server" Text="<%#Container.DataItem%>"></asp:Label>
                                    <%--<asp:TextBox ID="textBoxSearch" runat="server" Text="<%#Container.DataItem%>"></asp:TextBox>--%>
                                    <asp:Button ID="BTNAdd" runat="server" Text="Add"  OnClick="button_click"/><br />
                                    <asp:DataGrid ID="dgLCL" runat="server" BorderWidth="1px" BorderColor="#FE9B00"
                                                                    BorderStyle="Solid" BackColor="White" Font-Names="Verdana" Font-Size="XX-Small"
                                                                    AutoGenerateColumns="False" ShowFooter="FALSE" CellPadding="3" align="center"
                                                                    Width="700px" OnItemCommand="dgLCL_Select" OnDeleteCommand="dgLCL_Delete">
                                                                    <FooterStyle ForeColor="#000066" BackColor="White"></FooterStyle>
                                                                    <SelectedItemStyle Font-Bold="True" ForeColor="Black" BackColor="Snow"></SelectedItemStyle>
                                                                    <EditItemStyle BackColor="AntiqueWhite"></EditItemStyle>
                                                                    <PagerStyle BackColor="#FDE9CB" ForeColor="#003399" HorizontalAlign="Right" Mode="NumericPages"
                                                                    Position="Bottom" Font-Size="Small" Font-Bold="true" />
                                                                    <AlternatingItemStyle BackColor="Snow"></AlternatingItemStyle>
                                                                    <ItemStyle ForeColor="#000066" BackColor="Snow"></ItemStyle>
                                                                    <HeaderStyle Font-Size="XX-Small" Font-Bold="True" Height="10px" ForeColor="#000000"
                                                                    BackColor="#FFDBA6"></HeaderStyle>
                                                    <Columns>
                                                        <asp:TemplateColumn>
                                                        <ItemTemplate>
                                                                <asp:ImageButton runat="server" ID="IMGBTNAdd" ImageUrl="~/AppImages/grid-icon-add.jpg"
                                                                ToolTip="Insert"  CommandName="SelectItem" AlternateText="Insert" />

                                                        </ItemTemplate>
                                                         </asp:TemplateColumn>

                                                        <asp:BoundColumn DataField="MasterNo" HeaderText="MasterNo"></asp:BoundColumn>
                                                        <asp:BoundColumn DataField="MasterDate" HeaderText="MasterDate"></asp:BoundColumn>
                                                        <asp:BoundColumn DataField="GrossWt" HeaderText="GrossWt"></asp:BoundColumn>
                                                        <asp:BoundColumn DataField="GrossUOMType" HeaderText="Type"></asp:BoundColumn>
                                                        <asp:BoundColumn DataField="Volume" HeaderText="Volume"></asp:BoundColumn>
                                                        <asp:TemplateColumn HeaderText="DELETE">
                                                            <ItemTemplate>
                                                                <asp:ImageButton runat="server" ID="IMGBTNDelete" ImageUrl="~/AppImages/grid-icon-delete.jpg"
                                                                    ToolTip="Delete"  CommandName="DeleteItem" OnClientClick="javascript:return confirmDelete();"
                                                                    AlternateText="Delete" />
                                                            </ItemTemplate>
                                                        </asp:TemplateColumn>
                                                    </Columns>
                                                    <PagerStyle HorizontalAlign="Left" ForeColor="#000066" BackColor="White" Mode="NumericPages">
                                                    </PagerStyle>
                                                </asp:DataGrid><br />
                                </ItemTemplate>

                        </asp:Repeater>

中繼器是解決此問題的理想選擇。 與其動態添加文本框,不如在此處使用中繼器控件,這樣易於維護。 以下是您可以做什么的概述。

<asp:Repeater runat="server" OnItemDataBound="repeaterSearchResult_ItemDataBound" ID="repeaterSearchResult">
            <ItemTemplate>
                <asp:TextBox ID="textBoxSearch" runat="server" Text="<%#Container.DataItem%>"></asp:TextBox>
                <asp:Button ID="buttonAdd" runat="server" Text="Button"  OnClick="button_click"/>
                <asp:GridView ID="gridView" runat="server">
                    <%--Add the Columns you want to display--%>
                </asp:GridView>
            </ItemTemplate>

</asp:Repeater>

在您的代碼中,從數據讀取器獲取搜索結果后,而不是創建文本框和按鈕,而是將結果綁定到轉發器

SqlDataReader rdr = mobjGenlib.objDBLib.ExecuteQueryReader(sql.ToString());
        while (rdr.Read())
        {
            LocationName.Add(rdr.GetValue(0).ToString());
        }
        rdr.Close();
        repeaterSearchResult.DataSource = LocationName;
        repeaterSearchResult.DataBind();

在中繼器OnItemDataBound中,綁定網格視圖

protected void repeaterSearchResult_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            GridView gv = e.Item.FindControl("gridView") as GridView;
            TextBox textBox = e.Item.FindControl("textBoxSearch") as TextBox;
            if (gv != null)
            {
                //Bind gridview here
            }
        }

在按鈕單擊事件中,您可以重定向到頁面。 如果需要,還可以使用按鈕的命令參數來標識當前索引。

對於您要打開新表格的問題,您可以使用以下方法。 在圖像按鈕中添加如下所示的onclientclick事件。

<asp:ImageButton runat="server" OnClientClick="return openNewForm();" ID="IMGBTNAdd" ImageUrl="~/AppImages/grid-icon-add.jpg"
                                                                ToolTip="Insert"  CommandName="SelectItem" AlternateText="Insert" />

然后添加一個javascript函數以打開彈出窗口

    <script type="text/javascript">
        function openNewForm() {
            window.open("url for the new form", "newForm", "menubar=0,resizable=1,location=0,status=0,scrollbars=1,height=500,width=600");
            return false;
        }
    </script>

暫無
暫無

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

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