Monday, July 16, 2007

pagination in datagrid webpart in sharepoint

The Best way to bind datagrid with the Pagination property and Edit and update command .


I was stuck in Adding pagination property to datagrid which was created under sharepoint webparts .

The Next pagination is working but Prev Pagination is not working. I tryed with somany ways but not able to find out .

Atlast I rearranged the code which handle viewstate properly ..

This is the code which works properly ...

public class TestHOF : WebPart
{

// To get the data from databse
public static DataSet getData()
{
DataSet ds = new DataSet();

return ds;
}
//======================================================================
///
/// Method to get connection string from web.config
///

//======================================================================
public static string GetConnectionstring()
{
string connStr = string.Empty;
try
{
connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
}
catch
{


}

return connStr;
}

private MyDataGrid grid;

private bool DynamicColumnsAdded
{
get
{
object o = ViewState["DynamicColumnsAdded"];
if (o != null)
{
return (bool)o;
}
return false;
}
set
{
ViewState["DynamicColumnsAdded"] = value;
}
}

protected override void CreateChildControls()
{
grid = new MyDataGrid();
grid.ID = "DataGridInsideWebPart";
grid.AllowPaging = true;
grid.PageSize = 5;
grid.PagerStyle.Mode = PagerMode.NextPrev;
grid.PagerStyle.NextPageText = "Next";
grid.PagerStyle.PrevPageText = "Prev";
grid.ItemCommand += new DataGridCommandEventHandler(this.LanguageGrid_ItemCommand);
grid.UpdateCommand += new DataGridCommandEventHandler(this.LanguageGrid_UpdateCommand);
grid.PageIndexChanged += new DataGridPageChangedEventHandler(grid_PageIndexChanged);
grid.AutoGenerateColumns = false;

this.Controls.Add(grid);
ChildControlsCreated = true;
}

void grid_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
//throw new Exception("The method or operation is not implemented.");
grid.CurrentPageIndex = e.NewPageIndex;
grid.DataSource = getHOFMembersData();
grid.DataBind();
}

protected override void OnLoad(EventArgs e)
{
EnsureChildControls();
if (!DynamicColumnsAdded)
{
AddColumns();
}
if (!Page.IsPostBack)
{
grid.DataSource = getData() ;
grid.DataBind();
}
base.OnLoad(e);

}

public void LanguageGrid_ItemCommand(Object sender, DataGridCommandEventArgs e)
{
if (e.CommandName == "Edit")
{
Page.Response.Write("Edit:" + e.Item.ItemIndex);
this.LanguageGrid_EditItem(sender, e);
}
if (e.CommandName == "Update")
{
Page.Response.Write("Update:" + e.Item.ItemIndex);
this.LanguageGrid_UpdateCommand(sender, e);
}
}

public void LanguageGrid_EditItem(Object sender, DataGridCommandEventArgs e)
{
grid.EditItemIndex = e.Item.ItemIndex;
grid.DataBind(); // Refreshes the grid
}

public void LanguageGrid_UpdateCommand(Object sender, DataGridCommandEventArgs e)
{
string language = e.Item.Cells[0].Text;
grid.EditItemIndex = -1;
grid.DataBind();
}

protected override void LoadViewState(object savedState)
{
EnsureChildControls();
object[] stateArr = (object[])savedState;
base.LoadViewState(stateArr[0]);
grid.LoadDGViewState(stateArr[1]);
if (DynamicColumnsAdded)
{
AddColumns();
}
}

protected override object SaveViewState()
{
object[] state = new object[2];
state[0] = base.SaveViewState();
state[1] = grid.SaveDGViewState();
return state;
}

private void AddColumns()
{
BoundColumn languages = new BoundColumn();
languages.DataField = "CategoryId";
languages.HeaderText = "CategoryId";

EditCommandColumn edit = new EditCommandColumn();
edit.ButtonType = ButtonColumnType.LinkButton;
edit.EditText = "Edit";
edit.UpdateText = "Update";
grid.Columns.Add(languages);
grid.Columns.Add(edit);

DynamicColumnsAdded = true;
}

private class MyDataGrid : DataGrid
{
public void LoadDGViewState(object state)
{
this.LoadViewState(state);
}

public object SaveDGViewState()
{
return this.SaveViewState();
}
}






}