2013-07-12 43 views
4

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

这是我的GridView代码:

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

'SqlDataReader'是只进。寻呼需要向前和向后。使用不同的数据源:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.aspx – pete

+0

我可以举个例子吗? –

回答

1

您是否尝试过使用SqlDataAdapter来填充DataSet/DataTable中与您的SQL结果?然后使用该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; 
} 

然后你就可以使用数据表作为你的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(); 

希望这将有助于。

+0

当我尝试这种方式,并在'GridView1.DataSource = GetDataTable(connectionString,query);'我得到了这两个错误:连接字符串不存在于当前上下文中,查询在当前上下文中不存在。 –

+0

您必须在调用GetDataTable()之前定义连接字符串和查询变量:p它们只是占位符。 – digiliooo

+0

现在显示connectionString和查询变量的值 – digiliooo

6

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

很棒:)为我工作 –

+0

我无法告诉你我浪费了多少时间。感谢您结束这次挫折。 –

0

您可以通过两种方式申请

分页到GridView

(1)使用对象数据源与你的GridView

(2)使用jQuery的DataTable

相关问题