Ben*_*n L 4 c# asp.net gridview sqldatasource
当我使用自定义SqlDataSource时,我无法使用GridView使用户能够对数据列进行排序.
我有一个GridView,其中HTML中引用它的代码是最小的:
<asp:GridView id="grid" runat="server" AutoGenerateColumns="False" AllowSorting="True">
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
在代码隐藏中,我附加了一个动态创建的SqlDataSource(它包含的列并不总是相同,因此用于创建它的SQL是在运行时构造的).例如:
我设置了专栏......
BoundField column = new BoundField();
column.DataField = columnName;
column.HeaderText = "Heading";
column.SortExpression = columnName;
grid.Columns.Add(column);
Run Code Online (Sandbox Code Playgroud)
数据源......
SqlDataSource dataSource = new SqlDataSource(
"System.Data.SqlClient",
connectionString,
generatedSelectCommand);
Run Code Online (Sandbox Code Playgroud)
那么gridview ......
grid.DataSource = dataSource;
grid.DataKeyNames = mylistOfKeys;
grid.DataBind();
Run Code Online (Sandbox Code Playgroud)
当我希望它对列数据进行排序时,当用户点击列标题时,没有任何反应.任何想法,我缺少什么?
如果有一个更好的方式这样做也会有所帮助,因为这看起来很混乱!
小智 5
您还可以在Sorting处理程序中的DataBind()调用之前重新分配datasource.SelectCommand.像这样的东西:
protected void gvItems_Sorting(object sender, GridViewSortEventArgs e)
{
GridView gv = (GridView)sender;
SqlDataSource ds = (SqlDataSource)gv.DataSource;
ds.SelectCommand = ds.SelectCommand + " order by "
+ e.SortExpression + " " + GetSortDirection(e.SortDirection);
gvItems.DataSource = ds;
gvItems.DataBind();
}
string GetSortDirection(string sSortDirCmd)
{
string sSortDir;
if ((SortDirection.Ascending == sSortDirCmd))
{
sSortDir = "asc";
}
else
{
sSortDir = "desc";
}
return sSortDir;
}
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.如果您需要额外的帮助来实现它,请告诉我.
请享用!
首先您需要添加一个事件:
<asp:GridView AllowSorting="True" OnSorting="gvName_Sorting" ...
Run Code Online (Sandbox Code Playgroud)
那么该事件看起来像:
protected void gvName_Sorting( object sender, GridViewSortEventArgs e )
{
...
//rebind gridview
}
Run Code Online (Sandbox Code Playgroud)
您基本上必须再次获取数据。
你是对的,它看起来很乱,有更好的方法:ASP.Net MVC
不幸的是,这是一个完全不同的页面模型。
| 归档时间: |
|
| 查看次数: |
34889 次 |
| 最近记录: |