ASP。 NET C#GridView分页

时间:2010-07-29 12:36:14

标签: 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”属性然后当我运行它时出现错误,指出“数据源不支持服务器端数据分页”。我只是想知道在我已经硬编码时如何使用分页。

有没有办法解决我的问题。先谢谢你,上帝保佑! :)

5 个答案:

答案 0 :(得分:1)

确保您对数据采取行动......

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

答案 1 :(得分:0)

您是否为AdminViewBuyersGV_PageIndexChanging例程编写了代码?

答案 2 :(得分:0)

除非您有充分的理由在代码中绑定数据源,否则您可能希望在.aspx页面中使用SqlDataSource控件。你可以给它一个参数(这比你按照你的方式构建一个sql字符串更安全),它应该支持开箱即用的分页......

答案 3 :(得分:0)

好的,使用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 Injection来消除您查询中的潜在parameterized query :)为了做到这一点,我们需要将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>

VOILA!

无代码分页*

*值得注意的是,这在优化方面相当差,因为所有的分页工作都是在Web服务器上完成的。要真正提高效率,您可能希望在数据库级别使用一些分页。否则你将每次都带回每条记录。

答案 4 :(得分:0)

它说它不喜欢你绑定的数据。因此,请尝试整理您绑定的数据:

AdminViewBuyersGV.DataSource = tbl.ToList();