I´m trying to work with paging for my GridView but I get an error: "The data source does not support server-side data paging".
I do not understand what I'm doing wrong....
HTML (ASPX markup):
<asp:GridView ID="gwActivity" runat="server" AutoGenerateColumns="False" AllowPaging="True" OnRowCommand="gwActivity_RowCommand" CssClass="gwActivity" OnPageIndexChanging="gwActivity_PageIndexChanging">................[Plus more]
Code behind:
public void BindGridviewActivity()
{
/*************Connectionstring is located in Web.config ******************/
string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("SELECT T1.[ActivityID] FROM [BI_Planning].[dbo].[tlbActivity]", con);
con.Open();
gwActivity.DataSource = cmd.ExecuteReader();
gwActivity.DataBind();
}
}
Code behind (GridView):
protected void gwActivity_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gwActivity.PageIndex = e.NewPageIndex;
BindGridviewActivity();
}
The exception most possibly come from this line:
gwActivity.DataSource = cmd.ExecuteReader();
AFAIK, SqlDataReader
used by ExecuteReader()
method can't be used to bind as GridView
data source because it is forward-only reader and doesn't support paging feature. Use another data source like SqlDataAdapter
which support bi-directional data reading as given below:
public void BindGridviewActivity()
{
/*************Connectionstring is located in Web.config ******************/
string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("SELECT T1.[ActivityID] FROM [BI_Planning].[dbo].[tlbActivity]", con);
con.Open();
var da = new SqlDataAdapter(cmd);
var ds = new DataSet();
da.Fill(ds);
if (ds.Tables.Count > 0)
{
gwActivity.DataSource = ds.Tables[0];
gwActivity.DataBind();
}
}
}