Filtraggio su RadGrid non funziona
Domanda
Ho creato un RadGrid con un paio di campi per il filtraggio e io non riesco a ottenere il filtraggio per funzionare. Posso vedere chiaramente la pubblicazione di nuovo (l'Ajax spinny cerchio cosa) dopo aver digitato qualcosa nella scatola filtro, tuttavia i miei risultati sono sempre gli stessi. Sto usando la seguente definizione nel file aspx:
<telerik:RadGrid PageSize="4" ID="RadGrid1" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" OnNeedDataSource="RadGrid1_NeedDataSource"
OnSelectedIndexChanged="RadGrid1_SelectedIndexChanged" Skin="Black" ShowFooter="True"
ShowStatusBar="True" AllowFilteringByColumn="True"
EnableLinqExpressions="False">
<MasterTableView AllowFilteringByColumn="true" Caption="Select a Customer">
<Columns>
<telerik:GridTemplateColumn CurrentFilterFunction="StartsWith" HeaderText="First Name" AllowFiltering="true" AutoPostBackOnFilter="true">
<ItemTemplate>
<%#GetFirstName(DataBinder.Eval(Container, "DataItem"))%>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Last Name" AllowFiltering="true" AutoPostBackOnFilter="true">
<ItemTemplate>
<%#GetLastName(DataBinder.Eval(Container, "DataItem"))%>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Address">
<ItemTemplate>
<%#GetAddress(DataBinder.Eval(Container, "DataItem"))%>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Shop">
<ItemTemplate>
<%#GetShopName(DataBinder.Eval(Container, "DataItem"))%>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
<RowIndicatorColumn>
<HeaderStyle Width="20px"></HeaderStyle>
</RowIndicatorColumn>
<ExpandCollapseColumn>
<HeaderStyle Width="20px"></HeaderStyle>
</ExpandCollapseColumn>
</MasterTableView>
<ClientSettings EnableRowHoverStyle="true" EnablePostBackOnRowClick="True">
<Selecting AllowRowSelect="true" />
</ClientSettings>
<PagerStyle Mode="NumericPages" />
</telerik:RadGrid>
E ho avuto il seguente nel mio codice dietro:
protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
BusinessLayer.Customers Customers = new BusinessLayer.Customers();
Customers.GetBySQLStatement(GetCustomerSQL());
this.RadGrid1.DataSource = Customers;
}
Tutte le idee?
Soluzione
Aggiungi DataField per ogni colonna o utilizzare GridBoundColumns , piuttosto che GridTemplateColumns.
Altri suggerimenti
La tua definizione della griglia sembra OK per me - non so dove il problema è. Io uso la griglia Telerik da qualche tempo e che cosa farei se nei tuoi panni sarebbe quello di eseguire il debug il mio codice, vedo quale sia il valore di MasterTableView.FilterExpression è dentro NeedDataSource e se i record restituiti vengono filtrati con quella espressione e passati alla griglia .
Dick
Public Sub RadGrid_NeedDataSource(ByVal source As RadGrid, ByVal e As GridNeedDataSourceEventArgs) 'Handles RadGrid.NeedDataSource
Dim RadGrid As RadGrid = CType(source, RadGrid)
'Dim nestedItem As GridNestedViewItem = CType(source.NamingContainer, GridNestedViewItem)
'Dim CustomerID = CType(nestedItem.ParentItem, GridDataItem).GetDataKeyValue(source.Attributes("TableID"))
Dim gridSortString As String = RadGrid.MasterTableView.SortExpressions.GetSortString()
Dim args As New DataSourceSelectArguments(gridSortString)
If gridSortString Is Nothing Then
RadGrid.DataSource = GetDataTable("SELECT * FROM [" + source.Attributes("TableName") + "] ") 'Where CustomerID = N'" + CustomerID + "'
Else
RadGrid.DataSource = GetDataTable("SELECT * FROM [" + source.Attributes("TableName") + "] ORDER BY " & gridSortString) 'Where CustomerID = N'" + CustomerID + "'
End If
End Sub