簡體   English   中英

ASP。 NET C#GridView分頁

[英]ASP. NET C# GridView Paging

大家好。 我有某個公司的此Web應用程序。 在此Web應用程序中,有一部分使用GridView來顯示數據庫中的記錄,並且對其顯示方式進行了硬編碼。 我將在下面顯示我的代碼。

          string SQLCommand = "SELECT LastName +', ' +FirstName + ' '+MiddleInitial AS  'Name', UserName + ' 'As 'User Name', StreetAddress FROM  CustomersMaster Where LastName   Like '%"+  SearchText.Text.Trim() + "%'";

            SqlCommand com = new SqlCommand(SQLCommand, con);

            SqlDataAdapter adp = new SqlDataAdapter(com);

            DataTable tbl = new DataTable();
            adp.Fill(tbl);

            AdminViewBuyersGV.DataSource = tbl;
            AdminViewBuyersGV.DataBind();

我的問題是我想使用GridView的“ Paging”屬性,但是當我激活“ Paging”屬性然后運行它時,出現一個錯誤,提示“數據源不支持服務器端數據分頁”。 我只想知道已經對它進行硬編碼時如何使用分頁。

有沒有辦法解決我的問題。 在此先感謝您,上帝保佑! :)

確保您正在處理數據...

if (tbl.Rows.Count > 0)
{
      AdminViewBuyersGV.DataSource = tbl;
      AdminViewBuyersGV.DataBind();
}
else
 {
  // no records
 }

它說它不喜歡您要綁定的數據。 因此,請嘗試整理要綁定的數據:

AdminViewBuyersGV.DataSource = tbl.ToList();

您是否為AdminViewBuyersGV_PageIndexChanging例程編寫代碼?

除非有充分的理由將數據源綁定到代碼中,否則您可能需要查看在.aspx頁中使用SqlDataSource控件。 您可以給它提供一個參數(比您以自己的方式構建sql字符串更安全),它應該支持開箱即用的分頁...

好的,使用SqlDataSource的完整示例(如Kendrick所述):

首先,您需要從查詢中收集參數,好像您已經在某個地方的文本框中一樣。 像這樣:

<asp:Label ID="lblLastName" runat="server" AssociatedControlID="tbLastName" Text="Last Name" ClientIDMode="Static" />
<asp:TextBox ID="tbLastName" runat="server" ClientIDMode="Static" />
<asp:Button ID="btnSearch" runat="server" ClientIDMode="Static" Text="Search" />

現在,我們需要從原始代碼中刪除Raw Inline SQL,並將其移到SqlDataSource中。 我們還希望通過使用參數化查詢來擺脫查詢中可能存在的SQL注入 :)為此,我們需要將TextBox連接到該參數,但是幸運的是,DataSource控件允許我們執行以下操作:使用SelectParameters的任何代碼。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
ConnectionString="<%$ ConnectionStrings:ContactManagerConnectionString %>"    
    SelectCommand="SELECT LastName + ', ' + FirstName + ' ' + MiddleInitial AS 'Name', UserName AS 'User Name', StreetAddress FROM CustomersMaster WHERE (LastName LIKE '%' + @SearchText + '%')">
<SelectParameters>
    <asp:ControlParameter ControlID="tbLastName" ConvertEmptyStringToNull="true" 
        Name="SearchText" PropertyName="Text" DbType="String" />
</SelectParameters>
</asp:SqlDataSource>

一旦這兩部分就位,只需按所需方式設置網格,並將AllowPaging屬性設置為true。

<asp:GridView runat="server" AllowPaging="True" DataSourceID="SqlDataSource1" 
AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" 
            SortExpression="Name" />
        <asp:BoundField DataField="User Name" HeaderText="User Name" 
            SortExpression="User Name" />
        <asp:BoundField DataField="StreetAddress" HeaderText="StreetAddress" 
            SortExpression="StreetAddress" />
    </Columns>
</asp:GridView>

瞧!

無代碼分頁*

*值得注意的是,這在優化方面非常差,因為所有分頁工作都是在Web服務器上完成的。 為了真正提高效率,您需要在數據庫級別使用一些分頁。 否則,您將每次帶回每條記錄。

暫無
暫無

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

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