Thank you very much for the link dharmendr. I have used all the code on the link as they appear there.
The only thing different is my FillClientGrid() shown below replaces the BingGridView() method from the link because mine is querying the database while the link uses datatable with manually entered data.
private DataTable FillClientGrid()
{
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["constr"].ToString());
DataTable dt = new DataTable();
string query = "select * from Speakers;";
SqlDataAdapter da = new SqlDataAdapter(query, con);
con.Open();
da.Fill(dt);
con.Close();
if (dt.Rows.Count > 0)
{
grvSpeakers.DataSource = dt;
grvSpeakers.DataBind();
}
return dt;
}
//pageload() event
protected void Page_Load(object sender, EventArgs e)
{
//txtcDateAdded.Text = DateTime.Now.ToString("MM/dd/yyyy");
// ddl.SelectedIndex = 0;
if (!IsPostBack)
{
DataTable dt = FillClientGrid();
TableCell tableCell = grvSpeakers.HeaderRow.Cells[0];
System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
img.ImageUrl = "~/Images/up_arrow.png";
tableCell.Controls.Add(new LiteralControl(" "));
tableCell.Controls.Add(img);
ViewState["tables"] = dt;
}
}
Despite this, I keep getting:
Specified argument was out of the range of valid values. Parameter name: index
And it points to this line:
string lbText = ((LinkButton)grvSpeakers.HeaderRow.Cells[i].Controls[0]).Text;
My code has 6 controls that use sortExpression. So I tried leaving that number as Controls[0]. I also tried changing to [Controls[5]) since there are 6 controls but I keep getting that error message. Could it be there is something wrong with my FillClient() method?
protected void OnSorting(object sender, GridViewSortEventArgs e)
{
string SortDir = string.Empty;
DataTable dt = new DataTable();
dt = ViewState["tables"] as DataTable;
{
if (SortDirection == SortDirection.Ascending)
{
SortDirection = SortDirection.Descending;
SortDir = "Desc";
}
else
{
SortDirection = SortDirection.Ascending;
SortDir = "Asc";
}
DataView sortedView = new DataView(dt);
sortedView.Sort = string.Format("{0} {1}", e.SortExpression, SortDir);
grvSpeakers.DataSource = sortedView;
grvSpeakers.DataBind();
for (int i = 0; i < grvSpeakers.Columns.Count; i++)
{
string lbText = ((LinkButton)grvSpeakers.HeaderRow.Cells[i].Controls[0]).Text;
if (lbText == e.SortExpression)
{
TableCell tableCell = grvSpeakers.HeaderRow.Cells[i];
System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
img.ImageUrl = (SortDir == "Asc") ? "~/Images/down_arrow.png" : "~/Images/up_arrow.png";
tableCell.Controls.Add(new LiteralControl(" "));
tableCell.Controls.Add(img);
}
}
}
}
Again, thanks much for all your help