GridView 'GridView1' 触发了未处理的“Sorting”事件

3

我使用C#中的工具箱创建了一个GridView,它能够显示和排序我的SqlDataSource中的项目。但是当我像下面的代码一样更改SqlDataSource时,它会显示错误:"GridView 'GridView1' 触发了未处理的Sorting事件"。

SqlDataSource searchResults = new SqlDataSource(WebConfigurationManager.ConnectionStrings["MyDbConn"].ToString(), "SELECT * FROM Books WHERE id=1");
GridView1.DataSourceID = null;
GridView1.DataSource = searchResults;
GridView1.DataBind();

以下是我在Default.aspx中使用工具箱拖放创建的GridView和SqlDataConnection代码:

        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        AllowSorting="True" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1" BackColor="White" BorderColor="#DEDFDE" 
        BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" 
        GridLines="Vertical" Width="748px">
        <AlternatingRowStyle BackColor="White" />
        <Columns>
            <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" />
            <asp:BoundField DataField="BookName" HeaderText="BookName" 
                SortExpression="BookName" />
            <asp:BoundField DataField="Status" HeaderText="Status" 
                SortExpression="Status" />
            <asp:BoundField DataField="ReturnDate" HeaderText="ReturnDate" 
                SortExpression="ReturnDate" />
            <asp:CheckBoxField DataField="Reserve" HeaderText="Reserve" 
                SortExpression="Reserve" />
        </Columns>
        <FooterStyle BackColor="#CCCC99" />
        <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
        <RowStyle BackColor="#F7F7DE" />
        <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#FBFBF2" />
        <SortedAscendingHeaderStyle BackColor="#848384" />
        <SortedDescendingCellStyle BackColor="#EAEAD3" />
        <SortedDescendingHeaderStyle BackColor="#575357" />
    </asp:GridView>

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:MyDbConn %>" 
        SelectCommand="SELECT * FROM [Books]"></asp:SqlDataSource>
1个回答

3

更新

如果您想要更改数据源的SelectCommand,您无需动态添加新的数据源。只需要执行以下操作:

SqlDataSource1.SelectCommand = "SELECT * FROM Books WHERE id=1";
gv.DataBind();

如果想通过搜索术语来查找书籍,您可以采取以下方法:
SqlDataSource1.SelectCommand = "SELECT * FROM Books WHERE id LIKE '%" + searchTxt.Text + "'%";
gv.DataBind();

根据我的经验,动态添加新数据源似乎会导致严重问题。


请尝试

SqlDataSource searchResults = new SqlDataSource(WebConfigurationManager.ConnectionStrings["MyDbConn"].ToString(), "SELECT * FROM Books WHERE id=1");
searchResults.ID = "searchResults"; //or something else
this.Controls.Add(searchResults);
GridView1.DataSourceID = searchResults.ID;
GridView1.DataBind();

或更简单
 SqlDataSource searchResults = new SqlDataSource(WebConfigurationManager.ConnectionStrings["MyDbConn"].ToString(), "SELECT * FROM Books WHERE id=1");
this.Controls.Add(searchResults);
GridView1.DataSource = searchResults;
GridView1.DataBind();

收到2个错误(我复制粘贴了您的代码), 您发送的2部分有所不同, 对于第一个 -> 'GridView1' 的 DataSourceID 必须是类型为 IDataSource 的控件的 ID。找不到 ID 为 'searchResults' 的控件。对于第二个 -> 'GridView1' 上定义了 DataSource 和 DataSourceID。请删除一个定义。 - HOY
1
现在错误消息与标题相同。"GridView 'GridView1' 触发了未处理的 Sorting 事件。" - HOY
奇怪。你能提供你的GridView标记和设置数据源/数据源ID的所有代码吗? - AGuyCalledGerald
我已经添加了源代码,但是正如我所说的那样,我通过拖放方式添加了GridView。 - HOY
目前我无法解决某些问题。如果您将其他数据源放在标记中(例如SqlDataSource1),那么您应该没问题。您是否可以这样做,还是必须在代码后台加载它? - AGuyCalledGerald
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接