【问题标题】:Gridview in update panel not reflecting changes using ObjectDataSource更新面板中的 Gridview 不反映使用 ObjectDataSource 的更改
【发布时间】:2015-04-19 06:49:38
【问题描述】:

我有一个 asp.net GridView,它使用 ObjectDataSource 来获取数据。 GridView 位于 UpdatePanel 内部。我想过滤点击不同链接按钮的数据。为此,我为每个 LinkBut​​ton 编写了新的 SelectMethodSelectCountMethod,并在单击 LinkBut​​ton 时将这些方法设置为 ObjectDataSource。设置这两种方法后,我调用GridView.DataBind() 方法。所有SelectMethod的返回类型都是DataSet

我已经调试了从数据库中获取数据的代码,但 gridview 没有更新。当点击 LinkBut​​tons 时,GridView_DataBound 事件也没有命中。以下是我尝试过但不起作用的事情:

  • 设置链接按钮CausesValidation="True"
  • 设置更新面板UpdateMode="Always"
  • 使用SelectMethodSelectCountMethod 创建了ObjectDataSources 对于每个 LinkBut​​ton 并设置 GridView.DataSource 以单击 链接按钮。
  • 还尝试在单击链接按钮时设置FilterExpressionFilterParameters。这确实会触发 ObjectDataSource1_Filtering 事件并且传递了正确的参数。

带有 UpdatePanel 的 GridView

<asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
    <ContentTemplate>
        <asp:GridView ID="GridView" runat="server"
            AllowPaging="True" AllowSorting="True" CssClass="grdViewHeaderDivider"
            AutoGenerateColumns="True"
            OnSorting="GridView_Sorting"
            OnDataBound="GridView_DataBound"
            OnPageIndexChanging="GridView_PageIndexChanging"
            GridLines="None"
            DataSourceID="ObjectDataSource1">
        </asp:GridView>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="GridView" EventName="Sorting" />
        <asp:AsyncPostBackTrigger ControlID="GridView" EventName="PageIndexChanging" />
        <asp:AsyncPostBackTrigger ControlID="GridView" EventName="DataBound" />
        <asp:AsyncPostBackTrigger ControlID="lblTotalUploaded" EventName="Click" />
        <asp:AsyncPostBackTrigger ControlID="lblUploadedNS" EventName="Click" />
        <asp:AsyncPostBackTrigger ControlID="lblUploadedSA" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

对象数据源

    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OnFiltering="ObjectDataSource1_Filtering" SelectCountMethod="GetApplicationsCount" SelectMethod="GetApplications" TypeName="TestApp.Applications" SortParameterName="sortExpression" EnableCaching="false" EnablePaging="True" >
        <SelectParameters>

        </SelectParameters>
    </asp:ObjectDataSource>

链接按钮点击

protected void lblTotalUploaded_Click(object sender, EventArgs e)
        {
            var btn = (LinkButton)sender;

            //ObjectDataSource1.FilterExpression = "ApplicationName='{0}'";
            switch (btn.CommandName)
            {
                case "lblTotalUploaded":
                    ObjectDataSource1.SelectMethod = "GetApplications";
                    ObjectDataSource1.SelectCountMethod = "GetApplicationsCount";
                    break;
                case "lblUploadedSA":
                    ObjectDataSource1.SelectMethod = "GetScore";
                    ObjectDataSource1.SelectCountMethod = "GetScoreCount";
                    //ObjectDataSource1.FilterParameters.Add("ApplicationName", "Candy Crush");
                    break;
                case "lblUploadedNS":
                    ObjectDataSource1.SelectMethod = "GetNoScore";
                    ObjectDataSource1.SelectCountMethod = "GetNoScoreCount";
                    //ObjectDataSource1.FilterParameters.Add("ApplicationName", "Clash of Clans");
                    break;
            }
            ObjectDataSource1.Select();
            GridView.DataBind();
        }

【问题讨论】:

    标签: c# asp.net gridview objectdatasource


    【解决方案1】:

    有问题。发布解决方案以防有人需要。

    问题在于 ObjectDataSource 的 SelectMethod。当我单击 LinkBut​​ton 时,更新面板会重置 SelectMethod 并使用在设计时定义的。

    我通过对所有 LinkBut​​tons 仅使用 1 个 SelectMethod 并使用会话参数传递给 SelectMethod 并根据会话值获取数据来解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多