绑定gridview INSIDE ModalPopupExtender

时间:2015-12-09 16:10:19

标签: c# asp.net ajax gridview modalpopupextender

我在互联网上搜索过这个话题并且没有提出任何问题。要么我正在努力解决我的问题,要么我做了一件错事,以至于其他人都没有尝试过......

我有一个gridview。我在gridview中使用一个按钮来执行一个命令来打开一个ModalPopupExtender。那部分效果很好。一旦打开弹出窗口,我希望能够按下一个按钮来执行一个函数,该函数将执行一个Sql查询并绑定一个位于弹出面板中的gridview。之后,用户可以使用gridview执行操作,这将关闭模式弹出窗口。

这是我的HTML -

<cc1:ModalPopupExtender runat="server" ID="MPE_Issue" PopupControlID="pnlIssue" BackgroundCssClass="ModalPopupBG"
            TargetControlID="Hid_Sno" CancelControlID="btnIssueCancel">
        </cc1:ModalPopupExtender>
        <asp:Panel ID="pnlIssue" runat="server" Style="display: none" >
            <div class="HelloPopup">
                <div>
                    <br />
                    <h2>&nbsp;&nbsp;&nbsp;Issue Equipment</h2>
                    <br />
                    <asp:Panel runat="server" ID="pnlIssueSearch" DefaultButton="btnIssueSearch">
                        <div class="block" style="text-align: right; margin-left: 50px">
                            <asp:Label CssClass="lblBlock" runat="server" ID="lblIssueSearch" Text="Search:"></asp:Label>
                        </div>
                        <div class="block">
                            <asp:TextBox runat="server" ID="txtIssueSearch" Width="160px"></asp:TextBox>
                            <asp:ImageButton runat="server" ID="btnIssueSearch" ImageUrl="../Images/search.png" OnClick="btnIssueSearch_Click" />
                        </div>
                    </asp:Panel>
                    <asp:Panel runat="server" ID="pnlIssueSubmit" DefaultButton="btnIssueSubmit">
                        <div style="width: 275px; margin: auto; height: 295px; overflow: scroll;">
                            <asp:GridView runat="server" ID="gvIssue" AutoGenerateColumns="false" CssClass="mGrid" OnRowCommand="gvIssue_RowCommand">
                                <Columns>
                                    <asp:TemplateField HeaderText="Qty">
                                        <ItemTemplate>
                                            <asp:TextBox ID="txtIssueQty" runat="server" Text='<%# Bind("QTY") %>'></asp:TextBox>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:BoundField HeaderText="Assignment" DataField="FIRST_NAME" />
                                </Columns>
                            </asp:GridView>
                        </div>
                        <div class="center">
                            <asp:Button runat="server" ID="btnIssueSubmit" Text="Issue" OnClick="btnIssueSubmit_Click" />
                            <input type="button" id="btnIssueCancel" value="Cancel" />
                        </div>
                    </asp:Panel>

代码隐藏 -

    protected void gv1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "issue")
            {
                GridViewRow gvr3 = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
                string itemNo = ((Label)gvr3.Cells[0].FindControl("lblItemNo")).Text;
                btnIssueSubmit.Visible = false;
                txtIssueSearch.Text = "";

                MPE_Issue.Show();

            }        
    protected void btnIssueSearch_Click(object sender, ImageClickEventArgs e)
    {
        string query = "SELECT QTY, NEW_EMP_ID as NAME FROM TRANSACTION_TRACKING WHERE NEW_EMP_ID = @inputINT";
        string inputString = "%" + txtIssueSearch.Text + "%";
        int inputINT = Convert.ToInt32(txtIssueSearch.Text);

        SqlConnection con = new SqlConnection(CS);
        SqlDataAdapter da = new SqlDataAdapter(query, con);
        SqlParameter parameter = new SqlParameter("inputString", inputString);
        SqlParameter parameter2 = new SqlParameter("inputINT", inputINT);
        da.SelectCommand.Parameters.Add(parameter);
        da.SelectCommand.Parameters.Add(parameter2);

        DataSet ds = new DataSet();
        da.Fill(ds);
        gvIssue.DataSource = ds;
        gvIssue.DataBind();

        btnIssueSubmit.Visible = true;

        MPE_Issue.Show();

    }

修改/溶液 我正在解决这个问题。我想覆盖asp.net的本质,而不是顺其自然地流动并系统地解决问题。为了克服这个问题,我将数据绑定更改为自己的方法,并让面板中的按钮激活该方法,将弹出控件设置为Open(),并将布尔值从false设置为true。然后在page_load上我有一个事件检查布尔值并自动执行数据方法,如果它是真的(因此搜索参数在文本框中)。

感谢大家的建议和帮助。

2 个答案:

答案 0 :(得分:1)

如果你让你的pnlIssueSubmit成为一个UpdatePanel,那么在btnIssueSearch上做一个asyncpostback触发器就不能解决你的问题吗?因为你的imageButton需要做回帖以刷新网格,但是你会失去你的模态。像这样:

<asp:UpdatePanel id="pnlIssueUpdate" runat="server">
<ContentTemplate>
    <asp:Panel runat="server" ID="pnlIssueSubmit" DefaultButton="btnIssueSubmit">
        <div style="width: 275px; margin: auto; height: 295px; overflow: scroll;">
            <asp:GridView runat="server" ID="gvIssue" AutoGenerateColumns="false" CssClass="mGrid" OnRowCommand="gvIssue_RowCommand">
                <Columns>
                    <asp:TemplateField HeaderText="Qty">
                        <ItemTemplate>
                            <asp:TextBox ID="txtIssueQty" runat="server" Text='<%# Bind("QTY") %>'></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField HeaderText="Assignment" DataField="FIRST_NAME" />
                </Columns>
            </asp:GridView>
        </div>
        <div class="center">
            <asp:Button runat="server" ID="btnIssueSubmit" Text="Issue" OnClick="btnIssueSubmit_Click" />
            <input type="button" id="btnIssueCancel" value="Cancel" />
        </div>
    </asp:Panel>
</ContentTemplate>
<Triggers>
    <asp:asyncPostBackTrigger ControlID="btnIssueSearch" />
</Triggers>

答案 1 :(得分:0)

我正在解决这个问题。我想覆盖asp.net的本质,而不是顺其自然地流动并系统地解决问题。为了克服这个问题,我将数据绑定更改为自己的方法,并让面板中的按钮激活该方法,将弹出控件设置为Open(),并将布尔值从false设置为true。然后在page_load上我有一个事件检查布尔值并自动执行数据方法,如果它是真的(因此搜索参数在文本框中)。