使用DataBind()后无法对GridView进行排序

时间:2013-08-09 10:30:06

标签: c# asp.net sorting gridview data-binding

我有一个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;

仍然没有用,这是我得到的错误。

enter image description here

我在这里缺少什么?

2 个答案:

答案 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>