如何在telerik radgrid中对自定义列进行排序

时间:2014-01-17 17:39:12

标签: asp.net sorting telerik radgrid

我有一个带有自定义列的telerik radgrid。当满足特定条件时,该列会显示一个小图标(如果隐藏列具有值)。 当前排序适用于所有普通列,但在尝试排序自定义时,我得到通常的“服务器无法解析数据”错误

以下是radgrid代码:

    <telerik:RadGrid  
            AllowSorting="true"   
            AllowPaging="True"   
            OnSortCommand="ResultGrid_Validazioni_SortCommand" 
            ID="ResultGrid_Validazioni" 
            runat="server" 
            AutoGenerateColumns="False" 
            CellPadding="0"  
            PageSize="10"
            OnPageIndexChanged="ResultGrid_Validazioni_PageIndexChanged"
            PageSizeChanged="ResultGrid_Validazioni_PageSizeChanged" 
            OnSelectedIndexChanged="ResultGrid_Validazioni_SelectedIndexChanged"
            EnableEmbeddedSkins="false"                      
            Skin="GridMetroEB"
            OnItemDataBound="ResultGrid_Validazioni_ItemDataBound"
            >
            <SortingSettings SortToolTip="Premi qui per ordinare" SortedAscToolTip="Ordinamento crescente" SortedDescToolTip="Ordinamento decrescente" />

        <MasterTableView AllowMultiColumnSorting="true" >
            <NoRecordsTemplate>
                <b> &nbsp </b>
            </NoRecordsTemplate>
            <Columns>
                <telerik:GridBoundColumn UniqueName="RefKeyFonte" HeaderText="RefKeyFonte" DataField="RefKeyFonte" Display="false"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="CodiceCompagnia" HeaderText="CodiceCompagnia" DataField="Compagnia" Display="false"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="CodiceEnte" HeaderText="CodiceEnte" DataField="Ente" Display="false"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="CodiceSubEnte" HeaderText="CodiceSubEnte" DataField="SubEnte" Display="false"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="TipoDaValidare" HeaderText="TipoDaValidare" DataField="TipoDaValidare" Display="false"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="PuntoVendita" HeaderText="Punto Vendita" DataField="PuntoVendita" ></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Descrizione" HeaderText="Descrizione" DataField="Description" ></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="TipoValidazione" HeaderText="Tipo Validazione" DataField="TipoValidazione"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="DataInserimento" HeaderText="Data Inserimento" DataField="DataInserimento"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="DataUltimaOperazione" HeaderText="Data Ultima Operazione" DataField="DataUltimaOperazione" ></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="DataUltimaValidazione" HeaderText="Data Ultima Validazione" DataField="DataPrecedenteApprovazione" ></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Stato" HeaderText="Stato" DataField="Stato" ></telerik:GridBoundColumn>

                <telerik:GridTemplateColumn HeaderText="Nota" SortExpression="Nota">
                  <ItemTemplate>
                    <asp:ImageButton ID="btn_Nota" ImageUrl="../i/ElementiBase/Pad_25px.gif" OnClick="btn_Nota_Click" runat="server" Enabled="false"/>
                  </ItemTemplate>
                </telerik:GridTemplateColumn>
                <telerik:GridBoundColumn UniqueName="Note" HeaderText="Note" DataField="Note" Display="false" ></telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="HasEsito" HeaderText="HasEsito" DataField="HasEsito" Display="false"></telerik:GridBoundColumn>
            </Columns>
        </MasterTableView>
        <ClientSettings Selecting-AllowRowSelect="True" EnablePostBackOnRowClick="True">
            <ClientEvents OnRowClick="OnRowSelectingValidazioni" ></ClientEvents>

            </ClientSettings>
    </telerik:RadGrid>

以下是执行常规排序的代码:

    protected void ResultGrid_Validazioni_SortCommand(object source, Telerik.Web.UI.GridSortCommandEventArgs e)
    {
        RadGrid target = source as RadGrid;
        IWFCachedSearch searchProvider = CachedSearchProvider.GetWFCachedSearch(target.ID);

        List<Infrastructure.Helpers.SortingExp> sortingExp = new List<Infrastructure.Helpers.SortingExp>();

        foreach (GridSortExpression s in (source as RadGrid).MasterTableView.SortExpressions)
        {
            Infrastructure.Helpers.SortingExp sx = new Infrastructure.Helpers.SortingExp();
            sx.FieldName = s.FieldName;
            sx.SortDirection = s.SortOrderAsString();

            sortingExp.Add(sx);
        }

        // A Command could be fired also for a changed sort order.
        var sl = (from Infrastructure.Helpers.SortingExp s in sortingExp where s.FieldName == e.SortExpression select s).SingleOrDefault();

        if (sl != null)
        {
            sl.SortDirection = e.NewSortOrder.ToString();
        }
        else
        {
            Infrastructure.Helpers.SortingExp sxn = new Infrastructure.Helpers.SortingExp();
            sxn.FieldName = e.SortExpression;
            sxn.SortDirection = e.NewSortOrder.ToString();
            sortingExp.Add(sxn);
        }

        target.DataSource = ValidazioneGridFormat(searchProvider.GetData(sortingExp) as IEnumerable<ValidazioneBaseDto>);
        target.DataBind();
    }

非常感谢任何帮助。

0 个答案:

没有答案