【问题标题】:Sorting gridview - can't find column排序gridview - 找不到列
【发布时间】:2013-09-28 00:41:09
【问题描述】:

这里是相对新手。发现我必须编写一个事件处理程序来处理来自 objectdatasource 的数据排序。找到了很多对代码的引用,如下所示,但是当代码运行时,我收到消息“找不到列 xxx”,其中 xxx 是我要排序的列的名称。

我已验证 e.SortExpression 正在返回正确的列名,但问题似乎出在下面的第 2 行,我尝试从 GridView1.Datasource 创建一个数据表 (dt)。此语句之后的 dt 值是“nothing”,因此其余代码失败。

另外,我列出了大多数 gridview 定义,以防万一。

Protected Sub GridView1_Sorting(sender As Object, e As GridViewSortEventArgs) Handles GridView1.Sorting
    Dim dt As Data.DataTable = New Data.DataTable(GridView1.DataSource)
    If Not dt Is Nothing Then
        dt.DefaultView.Sort = e.SortExpression
        GridView1.DataSource = dt
        GridView1.DataBind()
    End If
End Sub

ASPX sn-p:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="ObjectDataSource1" CellPadding="4" 
        EmptyDataText="No records found for your search" ForeColor="#333333" 
        GridLines="None" Width="930px" BorderColor="#CCCCCC" Font-Size="12px" AllowSorting="True">
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <Columns>
            <asp:BoundField DataField="CustName" HeaderText="CustName" 
                SortExpression="CustName" />
            <asp:BoundField DataField="CustType" HeaderText="CustType" 
                SortExpression="CustType" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" />
            <asp:TemplateField HeaderText="Address" SortExpression="Addr1">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Addr1") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Addr1") %>'></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Phone" HeaderText="Phone" SortExpression="Phone" />
            <asp:BoundField DataField="ContactName" HeaderText="ContactName" 
                SortExpression="ContactName" />
            <asp:BoundField DataField="LastContactDate" HeaderText="LastContact" SortExpression="LastContactDate" dataformatstring="{0:d}" />
            <asp:BoundField DataField="CustSince" HeaderText="CustSince" 
                SortExpression="CustSince" dataformatstring="{0:MM/dd/yyyy}" />
            <asp:BoundField DataField="Status" HeaderText="Status"  
                SortExpression="Status" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" />
            <asp:BoundField DataField="Source" HeaderText="Source" 
                SortExpression="Source" />
            <asp:BoundField DataField="RelMgr" HeaderText="RelMgr" 
                SortExpression="RelMgr" />
            <asp:TemplateField HeaderText="RelMgrInfo">
                 <ItemTemplate>
                     <asp:HyperLink ID="RelMgrEmailLink" runat="server" NavigateUrl='<%#Eval("RelMgrEmail", "mailto:{0}")%>' Text='<%# Eval("RelMgrEmail") + "<br>" + Eval("RelMgrPhone")%>  '> </asp:HyperLink>
                 </ItemTemplate>
             </asp:TemplateField>
        </Columns>

谢谢!

【问题讨论】:

    标签: asp.net sorting gridview


    【解决方案1】:

    如果您使用 ObjectDataSource,则不必处理排序事件。相反,将 SortParameterName 设置为字符串(如“OrderBy”)并增加 ObjectDataSource 用于通过此参数检索数据的业务方法签名:

    public IEnumerable<Whatever> Retrieve( string OrderBy, ... other arguments ) ...
    

    网格会将参数值传递给 ODS,然后 ODS 会将其传递给您的方法。

    【讨论】:

    • Wiktor,我明白你在说什么,但无法让它发挥作用。我在 中添加了一个参数,然后在 ODS 的 SortParameterName 中引用了该参数,最后在我的 SELECT 方法语句中添加了一个对应的参数。但由于我在代码隐藏中注释掉了我的排序方法,我现在收到一个错误:“GridView 'GridView1' 触发的事件排序未处理”这就是我开始走这条路的原因。跨度>
    • 首先,通过将 EnableSorting 设置为 true 来启用网格视图排序。然后,将排序参数名称添加到您的对象数据源。然后,删除排序事件的处理程序,您不需要它。如果您仍有问题,请告诉我,我会为您提供一个可行的示例。
    • 是的,我已经完成了所有这些事情,Wiktor。我可以使用那个例子。谢谢!
    • 这将是ii.uni.wroc.pl/~wzychla/ra2829/example3a.zipii.uni.wroc.pl/~wzychla/ra2829/example3.zip 之一,现在无法验证,因为我使用的是不允许我窥视拉链的移动设备。无论如何,你应该有一个可分页和可排序的 gridview/listview 和 objectdatasource 那里。我在 asp.net 讲座中使用了这些示例。
    • 已验证,第二个例子就是那个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    相关资源
    最近更新 更多