【问题标题】:Gridview paging in ModalPopupExtender strange behaviourModalPopupExtender 中的 Gridview 分页奇怪的行为
【发布时间】:2013-08-19 10:38:12
【问题描述】:

我有一个包含网格视图的 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 不会立即向我显示页面?

我真的被困在这个问题上,无法理解我错过了什么!

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

【问题讨论】:

    标签: c# asp.net ajax modalpopupextender


    【解决方案1】:

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

    我建议您的 cmets;

    1. 将整个模态标记放在更新面板中。确保将 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();
      }
      

    【讨论】:

    • 非常感谢您抽出宝贵的时间,非常感谢您
    • 您好,我对您的建议很满意,基本上我创建了一个更新面板,将 asp:panel 与表格和网格视图一起放置在其中。还更新了 PageIndexChanging 并且它起作用了!但是,当我单击页码时,MPE 会跳到页面底部,但数据会正确更新。
    • 现在明白了,谢谢,我会发布有效的代码......很奇怪我不得不设置 TargetControlID="hiddenButton" 和 PopupControlID="upModal" 并将 MPE 放在更新面板之外。
    【解决方案2】:

    我终于让它工作了,我不得不将 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 2013-11-12
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 2019-05-19
      相关资源
      最近更新 更多