gpt4 book ai didi

asp.net - gridview + objectdatasource select方法调用两次

转载 作者:行者123 更新时间:2023-12-03 04:34:21 24 4
gpt4 key购买 nike

我有包含大量记录的gridview,因此必须使用ObjectDataSource以便仅获取将在页面上显示的记录,即如果总共有100条记录,并且页面大小为10,则在每个页面上仅单击10记录是从数据库中获取的。请找到下面的代码

///aspx

<asp:GridView ID="grdModulesList" CssClass="moduleList" runat="server"
AutoGenerateColumns="False" HeaderStyle-Font-Size="Smaller"
Font-Size="Small" AllowPaging="true" AllowSorting="True" OnRowCreated="grdModulesList_RowCreated"
OnRowDataBound="grdModulesList_RowDataBound" BackColor="White" BorderColor="Blue"
BorderStyle="None" BorderWidth="1px" CellPadding="3" PageSize="20">
<Columns>
<asp:BoundField DataField="collection_id" Visible="False" />
<asp:BoundField HeaderText="Item" />
<asp:BoundField HeaderText="Module Name" DataField="module_name" SortExpression="module_name"
ControlStyle-CssClass="moduleName" />
<asp:BoundField HeaderText="File Name" DataField="module_file_name" SortExpression="module_file_name" />
<asp:BoundField HeaderText="ID" DataField="defect_number" SortExpression="defect_number" />
<asp:BoundField HeaderText="Actions" />
</Columns>
<RowStyle BorderColor="Blue" BorderStyle="Solid" CssClass="grid_width" BorderWidth="2px"
Height="20px" />
<PagerStyle BackColor="#FFFF99" ForeColor="Red" HorizontalAlign="Center" Height="20px" />
<FooterStyle ForeColor="black" Font-Bold="true" />
<SelectedRowStyle Font-Size="Smaller" />
<HeaderStyle Font-Size="Smaller" BorderStyle="Solid" BackColor="Gold" Font-Bold="True"
ForeColor="Black" Height="30px" />
<AlternatingRowStyle BorderColor="#3366FF" BorderStyle="Solid" BorderWidth="1px" />
</asp:GridView>

//.aspx.cs

        ObjectDataSource ods = new ObjectDataSource();
ods.ID = "ods";
ods.SelectMethod = "GRAD_ModuleListforCollection_Subset"; //method to fetch records from DB
ods.EnablePaging = true;
ods.TypeName = "pmAdmin.classes.data.ApplicationData";
ods.StartRowIndexParameterName = "StartRecord";
ods.MaximumRowsParameterName = "PageSize";
ods.SortParameterName = "SortBy";
ods.SelectCountMethod = "GRAD_Total_Modules";
Parameter p1 = new Parameter("userID", TypeCode.String, userId);
ods.SelectParameters.Add(p1);
panelModuleList.Controls.Add(ods); //add objectDatasource control to a panel

grdModulesList.DataSourceID = ods.ID;
grdModulesList.DataBind();

//方法GRAD_ModuleListforCollection_Subset

public System.Data.DataSet GRAD_ModuleListforCollection_Subset(string userID, int StartRecord, int PageSize, string SortBy)
{}

记录已正确绑定(bind)到 Gridview,但问题是用于从数据库获取记录的方法,即每次点击页面时都会调用GRAD_ModuleListforCollection_Subset 两次。示例:如果我单击第 2 页,则会调用该方法() 第一次 startRecord=0,pagesize=20() 第二次调用 startRecord=20,pagesize=20

点击第2页后,如果我点击第3页() 第一次使用 startRecord=20,pagesize=20() 第二次调用 startRecord=40,pagesize=20

对于每次页面点击,第一次加载都有以前的值。

请帮我解决这个问题。

提前致谢。

最佳答案

进行了以下更改以使其正常工作

  1. 启用 objectDatasource 缓存
    ods.EnableCaching = true;

  2. 设置 session [“排序顺序”]

    grdModulesList.DataSourceID = ods.ID;
    grdModulesList.DataBind();
    if (Session["sortorder"] == null)
    Session["sortorder"] = "Ascending";
  3. 添加gridview排序事件

    protected void grdModulesList_Sorting(对象发送者,GridViewSortEventArgs e){ ods.SelectParameters["SortBy"].DefaultValue = GetSortExpr(e.SortExpression); e.取消=真;//我们必须这样做,否则我们会得到一个异常}

    public string GetSortExpr(string sortExp)
    {

    if (Session["sortorder"].ToString() == "Ascending")
    {
    Session["sortorder"] = "Descending";
    return sortExp + " DESC";
    }
    else
    {
    Session["sortorder"] = "Ascending";
    return sortExp + " ASC";
    }
    }

关于asp.net - gridview + objectdatasource select方法调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17923226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com