3

我有一个包含网格视图的 modalpopypextender ,我想在单击按钮时填充它:

protected void btnViewRecipients_Click(object sender, EventArgs e)
{
    ModalPopupExtender1.Show();
    BindData();
}

这是直截了当的。BindData 这样做:

protected void BindData()
{
    try
    {
        SqlCommand sqlCommand = new SqlCommand();

        string connectionString = "Data Source=SERVER\\DB1;Initial Catalog=Survey;User ID=abcde;Password=12345;";

        using (SqlConnection sqlConnection = new SqlConnection(connectionString))
        {
            sqlCommand = sqlConnection.CreateCommand();

            sqlCommand.CommandText = "Select * From [Survey].[dbo].[data]";

            SqlDataAdapter sda = new SqlDataAdapter(sqlCommand.CommandText, connectionString);

            SqlCommandBuilder scb = new SqlCommandBuilder(sda);

            //Create a DataTable to hold the query results.

            //Fill the DataTable.
            sda.Fill(dTable);

            //Set the DataGridView DataSource.
            gvRecords.DataSource = dTable;
            gvRecords.DataBind();

            sqlConnection.Close();
        }
    }
    catch (SqlException ex)
    {
        //Console.WriteLine(ex.StackTrace);
    }
}

现在这一切都很好,我可以看到带有数据的网格。然后我打开自动分页并继续创建调用 gvRecords_PageIndexChanged。我还打开了 EnableSortingAndPagingCallbacks。

protected void gvRecords_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvRecords.PageIndex = e.NewPageIndex;
    gvRecords.DataSource = dTable;
    gvRecords.DataBind();
}

这有点奇怪。我注意到,当我单击页码时,表格变为空白并显示我之前定义的 EmptyDataText。但是当我关闭 ModalPopupExtender 并再次打开它(再次单击按钮)时,它会显示正确的页面和数据!例如,如果我单击第 3 页,然后得到一个空白表,现在重新打开 MPE 将在网格视图中显示第 3 页的内容。我猜那是存储在某处的视图状态,但为什么 gridview 不会立即向我显示页面?

我真的被困在这一点上,无法理解我错过了什么!

任何帮助感激百万次,我已经在网上搜索和搜索了这个,但也许它是如此微不足道和明显以至于没有人需要问!?!

4

2 回答 2

0

编辑我多年来一直在使用 Modals、UpdatePanels 和 ListViews,我们会解决这个问题,但最好能看到整个标记。

根据您的意见,我建议;

  1. 将您的整个模态标记放在 UpdatePanel 中。确保将 ID 和 UpdateMode 设置为有条件的;

    <asp:UpdatePanel ID="upModal" runat="server" UpdateMode="Conditional">
       <ContentTemplate>      
       </ContentTemplate>
    </asp:UpdatePanel>
    
  2. 我通常在更新面板中使用 ASP:Panel 作为我的 DIV;

    <asp:Panel ID="pnlPopup" runat="server" CssClass="ModalPanel">
    
  3. 然后将您的 GridView(或者在我的情况下为 ListView)放在您的面板中

  4. 在您调用 gvRecords.Databind() 之后的代码中,调用 upModal.Update()

    protected void gvRecords_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
       gvRecords.PageIndex = e.NewPageIndex;
       gvRecords.DataSource = dTable;
       gvRecords.DataBind();
       upModal.Update();
    }
    
于 2013-08-16T23:06:59.200 回答
0

我终于让它工作了,我不得不将 PopupControlID 设置为 upModal,即更新面板的 ID,而不是内部面板。targetcontrolID 还必须指向一个隐藏按钮,正如许多人在使用 MPE 时必须发现的那样......

无论如何,这里是:

    <asp:Button ID="hiddenButton" runat="server" Text="" style="display:none;" />
    <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" Enabled="True" TargetControlID="hiddenButton" PopupControlID="upModal" BehaviorID="modalbehavior" BackgroundCssClass="modalBackground"  OnCancelScript="cancelClick();" CancelControlID="closePopup">
    </ajaxToolkit:ModalPopupExtender>

    <asp:UpdatePanel runat="server" ID="upModal" UpdateMode="Conditional">
        <ContentTemplate>

            <asp:Panel id="pnlPopup" runat="server" class="ModalPanel" >

                <table cellpadding="5" cellspacing="5" class="topBanner" style="width:100%;">
                    <tr>
                        <td width="50">
                            <asp:LinkButton ID="closePopup" runat="server" onclick="LinkButton1_Click" CssClass="ClosePopupCls">Close 
                            [x]</asp:LinkButton>
                        </td>
                        <td align="center">
                            <asp:Label ID="lbl" runat="server" Text="Status"></asp:Label>
                        </td>
                        <td width="25">
                        </td>
                    </tr>
                    <tr>
                        <td colspan="3">
                            <asp:GridView ID="gvRecords" runat="server" AllowPaging="True" 
                                BackColor="White" EmptyDataText="No Record Found" 
                                EnableSortingAndPagingCallbacks="True" ForeColor="GrayText" Height="600" 
                                onpageindexchanging="gvRecords_PageIndexChanging" Width="800">
                            </asp:GridView>
                        </td>
                    </tr>
                </table>
            </asp:Panel>

        </ContentTemplate>
    </asp:UpdatePanel>
于 2013-08-17T20:46:57.353 回答