如何动态创建gridview(Itemcommand和deletecommand),按钮和文本框以及处理单击事件

时间:2014-06-30 07:19:36

标签: c# asp.net

我即将开发一个Web应用程序,用于根据我们在文本框中输入的条件从数据库中搜索和获取数据。

一旦我们在文本框和点击搜索按钮中输入数据,我就会从一个地方到另一个地方,它将从数据库中获取数据并在文本框中显示(动态)。

例如:

如果我输入某个地点kolkata然后按Enter键,则会计算具有该地点kolkatta的记录总数。如果count为3,则应动态创建3个文本框,3个按钮(添加)和3个网格视图。然后,如果我们点击添加按钮,它将重定向到下一页。

我创建了一个文本框和一个按钮但是我无法创建3个网格视图,并且按钮的点击事件也没有触发。

以下是我在搜索按钮上动态创建控件的代码:

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;
                    }
                }
            }
}

**

&GT;我不知道如何编写代码到Datagrid onitemcommand和&gt; ondeletecommand。

**

任何人都可以帮助我实现这一目标吗?提前谢谢。

enter image description here

另一个问题: enter image description here

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>

1 个答案:

答案 0 :(得分:1)

中继器是解决此问题的理想选择。而不是动态添加文本框,而是使用转发器控件,这样更容易维护。 以下是您可以做的概要。

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