簡體   English   中英

使用ObjectDataSource錯誤消息對GridView進行排序

[英]Sorting GridView with ObjectDataSource Error Message

我正在跟蹤一個教程,以在具有ObjectDataSource作為數據源的GridView中啟用排序。 http://www.devtoolshed.com/content/gridview-objectdatasource-linq-paging-and-sorting

看起來很簡單,但是當我運行代碼時,

public List<tbl_Batch> SelectAllList(string sSortType, int iBeginRowIndex, int iMaximumRows)
    {

        using (TestEntities dbContext = new TestEntities())
        {

            var query = from q in dbContext.tbl_Batch
                        select q;     // sort     
            query = SelectAllSort(query, sSortType);     // filter the list if needed    
            query = SelectAllQuery(query);     // paginate    
            query = query.Skip(iBeginRowIndex).Take(iMaximumRows);     // execute the query and convert to list    
            return query.ToList();

        }
    }

當到達最后一行時,返回query.ToList(); 我收到錯誤消息:限制必須具有非負值。 參數名稱:limit我不知道是什么導致了此錯誤,並且在任何地方都找不到有關此錯誤的任何信息。

這是GridView的代碼,誰能告訴我我在做什么錯?

<asp:GridView ID="GridView1" runat="server"  DataKeyNames="intBatchID" 
        AllowPaging="True" OnDataBound="GridView1_DataBound" OnRowDataBound="GridView1_RowDataBound"
    AllowSorting="True" AutoGenerateColumns="False" SkinID="NOCTS" EnableSortingAndPagingCallbacks="True" 
        BorderStyle="Solid" HeaderStyle-BackColor="#990033" Width="1000px" 
        DataSourceID="ObjectDataSource1" OnSorting="GridView1_Sorting">
     <HeaderStyle ForeColor="White"></HeaderStyle>
    <Columns>      
        <asp:HyperLinkField DataNavigateUrlFields="intBatchID" HeaderText="Batch ID" DataNavigateUrlFormatString="TestPage1.aspx?intBatchID={0}" DataTextField="intBatchID" />      
        <asp:BoundField DataField="vcharName" HeaderText="Name" ReadOnly="True" 
            SortExpression="vcharName" />
        <asp:BoundField DataField="dtmScheduled" HeaderText="Date Scheduled" 
            ReadOnly="True" SortExpression="dtmScheduled" />
        <asp:BoundField DataField="intBatchPriorityLevel" 
            HeaderText="Priority Level" ReadOnly="True" 
            SortExpression="intBatchPriorityLevel" />
    </Columns>
    <PagerSettings Mode="NumericFirstLast" Position="TopAndBottom" PageButtonCount="4" PreviousPageText="Previous" NextPageText="Next" FirstPageText="First" LastPageText="Last" />
    <PagerStyle HorizontalAlign="Center" />        
</asp:GridView> 
 <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
    SelectMethod="SelectAllList" TypeName="NOCTSWebApplication.App_Code.Class3" 
    OnSelected="ObjectDataSource1_Selected" EnablePaging="True" 
    MaximumRowsParameterName="iMaximumRows" OldValuesParameterFormatString="original_{0}" 
    StartRowIndexParameterName="iBeginRowIndex" SortParameterName="sSortType">
    <SelectParameters>
        <asp:Parameter Name="sSortType" Type="String" />
        <asp:Parameter Name="iBeginRowIndex" Type="Int32" />
        <asp:Parameter Name="iMaximumRows" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

如果您需要我的代碼了,請告訴我。 這是我其余的代碼:

private IQueryable<tbl_Batch> SelectAllQuery(IQueryable<tbl_Batch> query)
    {       
        return query;
    }

    private IQueryable<tbl_Batch> SelectAllSort(IQueryable<tbl_Batch> query, string sSortType)
        {
            using (TestEntities dbContext = new TestEntities())
                {
                        bool bIsSortDescending = false;    
                    if (!String.IsNullOrEmpty(sSortType))    
                    {
                            string[] sValues = sSortType.Split(' ');        
                                if (sValues.Length > 1)        
                                {            
                                    if (sValues[1].ToUpper() == "DESC")            
                                    {                
                                       bIsSortDescending = true;            
                                    }        
                                }    
                    }     
                    if (!String.IsNullOrEmpty(sSortType))    
                    {
                            query = dbContext.tbl_Batch.OrderBy(sSortType);    
                    }    
                    else    
                    {        // use a default sort here        
                    if (bIsSortDescending)        
                    {            
                        query = query.OrderByDescending(q => q.intBatchID);        
                    }        
                    else        
                    {            
                     query = query.OrderBy(q => q.vcharName);        
                    }    
                }     
                    return query;
        }
    }

    public int SelectCount()
    {
        using (TestEntities dbContext = new TestEntities())
        {

            var query = from q in dbContext.tbl_Batch
                        select q;
            query = SelectAllQuery(query);     // execute the query and return the count    
            return query.Count();
        }
    }

您的設置中至少缺少一些元素。

首先,從ObjectDataSource刪除SelectParameters 然后確保您在網格中設置PageSize 最后,將SelectCountMethod = "SelectCount"添加到ObjectDataSource

如果您需要一個簡潔的示例來說明獲得適當結果需要哪些屬性,請查閱我幾年前為我的學生制作的示例之一:

http://www.ii.uni.wroc.pl/~wzychla/ra2829/example3a.zip

那里有兩個頁面, Default.aspx顯示了如何將ObjectDataSourceGridViewDetailsView配對,而Default2.aspx顯示了如何將ObjectDataSourceListView配對。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM