This is a migrated thread and some comments may be shown as answers.

"Cannot find column" when sorting dynamically filled grid

1 Answer 104 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Alexander
Top achievements
Rank 1
Alexander asked on 24 Jul 2013, 02:45 PM
Hi, I fill RadGrid in NeedDataSource like this:

protected void rgPortConfigView_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    var grid = (RadGrid) sender;
 
    IList<Swfc_Port_ConfigInfo> lpi;
    var spc = new Swfc_Port_Config_StateController();
    var dateRange = B4DateTimePicker.DateFromDateToFromPickerOrDefault(Page, "B4DateTimePickerDatesFilter", DateTime.Now.AddDays(-6), DateTime.Now, UrlConst.DATE_FROM, UrlConst.DATE_TO);
    this.dateFrom = dateRange.DateFrom;
    this.dateTo = dateRange.DateTo;
 
    int sfSanSwitchId;
    if (int.TryParse(Request.QueryString[UrlConst.SF__SAN_SWITCH__ID], out sfSanSwitchId))
    {
        QueryParams.SetValue("SAN_SWITCH_ID", sfSanSwitchId, FilterCondition.Equal, false);
    }
    int sfSwfcPortConfigSwfcPortIndex;
    if (int.TryParse(Request.QueryString[UrlConst.SF__SWFC_PORT_CONFIG__SWFC_PORT_INDEX], out sfSwfcPortConfigSwfcPortIndex))
    {
        QueryParams.SetValue("SWFC_PORT_INDEX", sfSwfcPortConfigSwfcPortIndex, FilterCondition.Equal, false);
    }
 
    switch (SubTabID)
    {
        case "top20ports":
            lpi = spc.LoadForPerformance(0, 20, "PERFORMANCE_IOSUM DESC", this.dateFrom, this.dateTo);
            this.rgPortConfigView.DataSource = lpi;
            break;
        case "allports":
            lpi = spc.LoadForPerformance(0, Int32.MaxValue - 2, grid.MasterTableView.SortExpressions.GetSortString() ?? "PERFORMANCE_IOSUM DESC", this.dateFrom, this.dateTo);
            this.rgPortConfigView.DataSource = lpi;
            break;
        case "top10isl":
            lpi = spc.LoadForPerformanceISL(0, 10, "PERFORMANCE_IOSUM DESC", this.dateFrom, this.dateTo);
            this.rgPortConfigView.DataSource = lpi;
            break;
        case "top20isl":
            lpi = spc.LoadForPerformanceISL(0, 20, "PERFORMANCE_IOSUM DESC", this.dateFrom, this.dateTo);
            this.rgPortConfigView.DataSource = lpi;
            break;
        case "allisl":
            lpi = spc.LoadForPerformanceISL(0, Int32.MaxValue - 2, grid.MasterTableView.SortExpressions.GetSortString() ?? "PERFORMANCE_IOSUM DESC", this.dateFrom, this.dateTo);
            this.rgPortConfigView.DataSource = lpi;
            break;
        case "top10ports":
        default:
            lpi = spc.LoadForPerformance(0, 10, "PERFORMANCE_IOSUM DESC", this.dateFrom, this.dateTo);
            this.rgPortConfigView.DataSource = lpi;
            break;
    }
 
    QueryParams.Remove("SAN_SWITCH_ID");
    QueryParams.Remove("SWFC_PORT_INDEX");
}

Here is one of the columns that causes the mentioned exception:

<telerik:GridTemplateColumn HeaderStyle-CssClass='GridHeaderGreen la' ItemStyle-CssClass='la' UniqueName="San_Switch__DisplayName" HeaderText="Switch Name" SortExpression="SAN_SWITCH_NAME">
    <ItemTemplate>
        <asp:HyperLink ID="hlSwitchName" runat="server" Text='<%# Eval("San_Switch.DisplayName") %>' NavigateUrl='<%# GetUrlToSwitchInfo(Container.DataItem) %>' />
    </ItemTemplate>
</telerik:GridTemplateColumn>

The funny thing is that db data is returned properly from LoadForPerformance method! And there is no error in SQL part! The exception happens AFTER! The grids with using "static" ObjectDataSource work without any problem in such cases, i.e. I can indicate field names or full names, using DB schema, table name and column name like SortExpression="SF.SAN_SWITCH.NAME"...

1 Answer, 1 is accepted

Sort by
0
Alexander
Top achievements
Rank 1
answered on 24 Jul 2013, 03:55 PM
Oops, forgot to use
AllowCustomSorting="True"

Now it works properly :)
Tags
Grid
Asked by
Alexander
Top achievements
Rank 1
Answers by
Alexander
Top achievements
Rank 1
Share this question
or