Here is an example of how you can sort and group a GridView.
private bool _sorted = false;
private int _sortColumnIndex = -1;
private string _sortColumnHeader = string.Empty;
private string _SortExpr;
public string SortExpr
{
get { return _SortExpr; }
set { _SortExpr = value; }
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
ResolveGroupingData(e.SortExpression);
}
private void ResolveGroupingData(string sortExpression)
{
foreach (DataControlField field in GridView1.Columns)
{
if (field.SortExpression == sortExpression)
{
_sorted = true;
SortExpr = sortExpression;
_sortColumnIndex = GridView1.Columns.IndexOf(field);
_sortColumnHeader = field.HeaderText;
}
}
}
protected override void Render(HtmlTextWriter writer)
{
if (_sorted)
{
Table table = (Table)GridView1.Controls[0];
Hashtable htLookUp = new Hashtable();
foreach (GridViewRow row in GridView1.Rows)
{
int realIndex = table.Rows.GetRowIndex(row);
string text = row.Cells[_sortColumnIndex].Text;
if (string.IsNullOrEmpty(text))
{
SortExpr = SortExpr.Replace('.', '_');
text = ((Label)row.FindControl("lbl" + SortExpr)).Text;
}
if (!htLookUp.ContainsKey(text))
{
htLookUp.Add(text, null);
GridViewRow newHeaderRow = new GridViewRow(realIndex, realIndex, DataControlRowType.DataRow, DataControlRowState.Normal);
TableCell newCell = new TableCell();
newHeaderRow.Cells.Add(newCell);
newCell.ColumnSpan = GridView1.Columns.Count;
newCell.BackColor = System.Drawing.Color.Gray;
newCell.ForeColor = System.Drawing.Color.White;
newCell.Font.Bold = true;
newCell.Text = string.Format(_sortColumnHeader, " : {0}", text);
table.Controls.AddAt(realIndex, newHeaderRow);
}
}
}
base.Render(writer);
}
0 comments:
Post a Comment