我有一个GridView
已经从SqlDataSource
获取了一些数据。
GridView
允许排序,分页,选择。
现在,当我点击button
时,我正在使用新的查询创建新的DataSource
,并且我将新的DataSource
分配给此网格,然后我使用.DataBind()
更新此网格,但在此之后,我无法对任何列进行排序。
动态创建新数据源
SqlDataSource data = new SqlDataSource();
data.ConnectionString = SqlDataSource1.ConnectionString;
data.ProviderName = SqlDataSource1.ProviderName;
data.SelectCommand = "SELECT * FROM USERS";
GridView2.DataSourceID = "";
GridView2.DataSource = data;
GridView2.DataBind();
我尝试使用以下内容:
GridView2.AllowSorting = true;
仍然没有用,这是我得到的错误。
我在这里缺少什么?
答案 0 :(得分:2)
如果更改SQLDataSource的原因是因为您想要在单击按钮时执行新查询;您可以在不创建新数据源的情况下执行此操作:
protected void yourButton_Click(object sender, EventArgs e)
{
// dsYourDataSource is the SQLDataSource that is already connected to your gridview
dsYourDataSource.SelectCommand = "SELECT * FROM USERS";
yourGridView.DataBind();
}
这可能会有所帮助。
答案 1 :(得分:0)
如果在不使用DataSourceControl DataSource(即SqlDataSource,ObjectDataSource)的情况下在GridView控件上设置AllowPaging =“true”或AllowSorting =“true”,则会遇到以下错误:
更改GridView控件上的页面时:
The GridView 'GridViewID' fired event PageIndexChanging which wasn't handled.
单击列名称以对GridView控件上的列进行排序时:
The GridView 'GridViewID' fired event Sorting which wasn't handled.
由于未将GridView的DataSourceID属性设置为DataSourceControl DataSource,您必须添加事件处理程序以进行排序和分页。
this问题的回答可能会对你有所帮助。
此外,我曾在我的一个项目中使用过this custom control。您可以从链接下载libarary并使用自定义GridViewEx控件。它运作良好。它看起来与真实的一样:
<cc:GridViewEx ID="gv" runat="server" AllowPaging=True AllowSorting=True
OnDataSourceRequested="gv_DataSourceRequested"
AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
...
</Columns>
</cc:GrdiViewEx>