2

我有一个GridView已经从SqlDataSource.

允许排序GridView分页选择。_

现在,当我单击 a 时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;

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

在此处输入图像描述

我在这里想念什么?

4

2 回答 2

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();
}

这可能会有所帮助。

于 2013-08-10T04:51:50.267 回答
0

如果在 GridView 控件上设置 AllowPaging="true" 或 AllowSorting="true" 而不使用 DataSourceControl 数据源(即 SqlDataSource、ObjectDataSource),则会遇到以下错误:

在 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 数据源,因此您必须添加用于排序和分页的事件处理程序。

这个SO question中的答案可能会对您有所帮助。

我也曾经在我的一个项目中使用过这个自定义控件。您可以从链接下载库并使用自定义 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>
于 2013-08-09T10:34:14.700 回答