Wednesday, November 21, 2007

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: