数据源不支持服务器端数据分页

时间:2013-07-12 03:05:35

标签: asp.net

我目前正在尝试为我的gridview做分页但是一旦我在gridview中允许分页,它就会给我这个错误:数据源不支持服务器端数据分页。

这是我的gridview代码:

        SqlDataReader reader = cmd.ExecuteReader();
        GridView1.DataSource = reader;
        GridView1.DataSourceID = null;
        GridView1.Visible = true;
        GridView1.AllowPaging= true;
        GridView1.DataBind(); 
        conn.Close();

3 个答案:

答案 0 :(得分:7)

SqlDataReader仅限前瞻性。服务器端分页需要能够向后和向前遍历数据源。使用支持双向遍历的其他数据源,如SqlDataAdapter

示例(根据要求):

string query = string.Empty;
SqlConnection conn = null;
SqlCommand cmd = null;
SqlDataAdapter da = null;
DataSet ds = null;

try {
    query = "SELECT * FROM table WHERE field = @value";
    conn = new SqlConnection("your connection string");

    cmd = new SqlCommand(query, conn);
    cmd.Parameters.Add("value", SqlDbType.VarChar, 50).Value = "some value";

    da = new SqlDataAdapter(cmd);
    ds = new DataSet();
    da.Fill(ds);

    if (ds.Tables.Count > 0) {
        GridView1.DataSource = ds.Tables(0);
        GridView1.AllowPaging = true;
        GridView1.DataBind();
    }
} catch (SqlException ex) {
//handle exception
} catch (Exception ex) {
//handle exception
} finally {
    if (da != null) {
        da.Dispose();
    }
    if (cmd != null) {
        cmd.Dispose();
    }
    if (conn != null) {
        conn.Dispose();
    }
}

SqlDataAdapter也来自System.Data.SqlClient命名空间。

答案 1 :(得分:1)

您是否尝试过使用SqlDataAdapter用SQL结果填充DataSet / DataTable?然后使用该DataTable作为GridView的数据源。填充DataTable的基本框架:

public DataTable GetDataTable(String connectionString, String query)
{
    DataTable dataTable = new DataTable();

    try
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
                {
                    dataAdapter.Fill(dataTable);
                }
            }
        }
    }
    catch
    {   

    }

    return dataTable;
}

然后您可以将该DataTable用作GridView DataSource:

String connectionString = "Data Source=<datasource>;Initial Catalog=<catalog>;User Id=<userID>;Password=<password>;";
String query = "SELECT * FROM TABLE_NAME WHERE ID=BLAH";

GridView1.DataSource = GetDataTable(connectionString, query);
GridView1.DataSourceID = null;
GridView1.Visible = true;
GridView1.AllowPaging= true;
GridView1.DataBind();

希望这会有所帮助。

答案 2 :(得分:0)

您可以通过两种方式将分页应用于gridview

(1)在gridview

中使用对象数据源

(2)使用jquery Datatable