Hi all
I have a problem in paging datagrid ..
I have a datagrid and i have template columns in it - is that affect on paging ? , so why paging doesn't work .
i tried the following code after allowing paging to datagrid:

private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
        {
            DataGrid1.CurrentPageIndex = e.NewPageIndex;
            DataGrid1.DataBind();

        }

does that should code work ?
or could any one give me a successeded code please .
Thanx..

Recommended Answers

All 14 Replies

Can you please tell us what is exactly happening when you run this code.

hey man
if u put a template in the datagrid, that doesn't affect. for the paging to work well u should write the source below.
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) Handles DataGrid1.PageIndexChanged {
DataGrid1.CurrentPageIndex = e.NewPageIndex;
<!-- here u should open connection
execute the query
close the connection
then data binding -->
DataGrid1.DataBind();

Thank you very much ,
But i did that before ,
The problem is i am using template columns , and change the properties of the controls(in the template columns) by a for loop which change all controls according to the index of the loop. but the compiler fires error when the index exceeds the page size

for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
DataGridItem dgi = DataGrid1.Items; // this is the error
LinkButton c_lb=(LinkButton)dgi.FindControl("Client_LB");
c_lb.Text=ds.Tables[0].Rows[0].ToString();
}

Exception
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

i dont know man
i didnt face this problem
i used as i told u and didnt face this problem
sorry

You definitely get this error as the data shown in grid is only 10 records(depending on the count you mentioned) but you are looping through the all the records in dataset.

Thank you very much ,
But i did that before ,
The problem is i am using template columns , and change the properties of the controls(in the template columns) by a for loop which change all controls according to the index of the loop. but the compiler fires error when the index exceeds the page size

for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
DataGridItem dgi = DataGrid1.Items; // this is the error
LinkButton c_lb=(LinkButton)dgi.FindControl("Client_LB");
c_lb.Text=ds.Tables[0].Rows[0].ToString();
}

Exception
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

Thanx very much
I know that this is the problem
and how can i change all the controls data without a loop throw all rows
i ask you , if u have another solution plz .
i have 3 days trying it ,i spent more and more time.
Thanx again
waitting any response.
bye

There are some grid events like ItemBound where you can set controls values. If you can tell me when exactly(On which event) and which record you want to display in controls it will be great.

Thank you very much
i have just tried the ItemDataBound event which set values to items in the bound time , it is really great ..
but also i have a problem in that event that how can i get a text from a cell from the e handler ?
i tried the following code in that event

DataGridItem dgi=e.Item;
SqlDataAdapter ad = new SqlDataAdapter("select Client_Name,Proj_Name,Task_Name,Task_Progress,Task_EndDate,Proj_Color,Task.Task_Id from Task,Client,Project where Task_Owner='"+Session["Uname"].ToString()+"' and Task.Task_Proj_Id=Project.Proj_Id and Project.Proj_Client_Id =Client.Client_Id and Task.Task_Id="+dgi.Cells[0].Text,con);
DataSet ds1= new DataSet();
LinkButton c_lb=(LinkButton)dgi.FindControl("Client_LB");
c_lb.Text=ds1.Tables[0].Rows[0][0].ToString();

but aslo the problem of paging is still exist ..
and i put in the 1st column the field of the task_id in databinding of the datagrid (as a Bound column) where can get the rest of columns data by quering by it .. although it returns an empty value at the first and the last rows of items

if you have a nice code to handle this event , i will be very pleased
Thank you very much

Ok
Thanx very much
the event just worked and the problem is solved ..
i used try and catch to handle the exception .. and all is right now .
Thanx very much
and Thanx for all who help me
Bye

:p :p :p :p

Could you please give specific code??????????? I tried, but theres still nochange..........Pleaseeeeeeeeeeeee................
Thank you a million.....

hi, do u want the code i used to solve my problem!!
in the datagrid events, add an event of itemDataBound()
which give u eventArgs e
u can use e.itemIndex to get the item index in the datagrid
you can aslo get the data of any column by that index
string name=datagrid.items[e.itemIndex].Tostring()
and so on!!

or send me what the problem you need to solve , your msg was too short
thanx
bye

Thank you WebDeveloper..........
I've solved my problems............Thnks for your good heart.................~~

Just simply drop your grid into your webform. And find the property of grid. and do allowpaging="true"
by that paging will shown in your grid page.

Protected Sub GrdRpt_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GrdRpt.PageIndexChanging
    GrdRpt.PageIndex = e.NewPageIndex
    GrdRpt.DataBind()
End Sub
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.