This is just a quick note on a post I made on the Dynamic Data Forum to answer a question where setting the DisplayColumnAttribute should set the default sort order of the GridView on the List page but didn’t. Here’s how I solved it with a hint or two from Marcin Dobosz.
[MetadataType(typeof(Orders_Metadata ))] [DisplayColumn("OrderID", "OrderID", true)] public partial class Orders { public class Orders_Metadata { // ... } }
Listing 1 – Example Metadata
Assuming you have a table with the DisplayColumnAttribute set you could put this on your List page:
table = GridDataSource.GetTable(); // set default sort if (!IsPostBack && table.SortColumn != null) GridView1.Sort(table.SortColumn.Name, table.SortDescending ? SortDirection.Descending : SortDirection.Ascending);
Listing 2 – Add to Page_Init (.Net 3.5)
// set default sort if (!IsPostBack && table.SortColumn != null) { var order = new OrderByExpression() { DataField = table.SortColumn.Name, Direction = table.SortDescending ? SortDirection.Descending : SortDirection.Ascending, }; GridQueryExtender.Expressions.Add(order); }
Listing 3 – Add to Page_Init (.Net 4)
public static T GetAttribute<T>(this MetaTable table) where T : Attribute { return table.Attributes.OfType<T>().FirstOrDefault(); }
Listing 3 – you will also need this extension method see Writing Attributes and Extension Methods for Dynamic Data
Add your DisplayColumnAttribute (see Listing 1) to the table you want sorted (note: it must have the second string constant even if it’s the same name, as the second string it the one that the sort is done on, and the third value if true causes the sort to be descending). Then in Listing 2 you get the attribute using the extension method from Listing 3 and apply the relevant sort.
This is here mainly so I can find it again!
2 comments:
cool!
thanks...
Hi,
First, many thanks for your hard work.
I need help in alternative paging for Dynamic data gridview. Do you know something about?
Sorry for my basic english. ;)
Many thanks,
JC
Post a Comment