I can’t get my GridView to enable a user to sort a column of data when I’m using a custom SqlDataSource.
I have a GridView in which the code in the ASP reference to it in the HTML is minimal:
<asp:GridView id='grid' runat='server' AutoGenerateColumns='False' AllowSorting='True'> </asp:GridView>
In the code-behind I attach a dynamically-created SqlDataSource (the columns it contains are not always the same so the SQL used to create it is constructed at runtime). For example:
I set up the columns…
BoundField column = new BoundField(); column.DataField = columnName; column.HeaderText = 'Heading'; column.SortExpression = columnName; grid.Columns.Add(column);
the data source…
SqlDataSource dataSource = new SqlDataSource( 'System.Data.SqlClient', connectionString, generatedSelectCommand);
then the gridview…
grid.DataSource = dataSource; grid.DataKeyNames = mylistOfKeys; grid.DataBind();
At the moment nothing happens when a user clicks on a column heading when I’d expect it to sort the column data. Anyone any ideas what I’m missing?
If there’s a nicer way of doing this that would be helpful too as this looks messy to me!
First you need to add an event:
Then that event looks like:
You basically have to get your data again.
You’re right that it looks messy and there is a better way: ASP.Net MVC
Unfortunately that’s a drastically different page model.