Workaround: create a custom RadListFilterPopup
private void radGridView1_FilterPopupRequired(object sender, FilterPopupRequiredEventArgs e)
{
e.FilterPopup = new MyRadListFilterPopup(e.Column);
}
public class MyRadListFilterPopup : RadListFilterPopup
{
public MyRadListFilterPopup(GridViewDataColumn dataColumn)
: base(dataColumn, false)
{ }
protected override RadListFilterDistinctValuesTable GetDistinctValuesTable()
{
if (this.DataColumn.OwnerTemplate.HierarchyLevel == 0)
{
return base.GetDistinctValuesTable();
}
GridViewColumnValuesCollection distinctValues = this.GetDistinctValuesWithFilter(this.DataColumn);
RadListFilterDistinctValuesTable valuesTable = new RadListFilterDistinctValuesTable();
valuesTable.FormatString = this.DataColumn.FormatString;
valuesTable.DataConversionInfoProvider = this.DataColumn;
GridViewComboBoxColumn comboBoxColumn = this.DataColumn as GridViewComboBoxColumn;
if (comboBoxColumn != null && !String.IsNullOrEmpty(comboBoxColumn.ValueMember))
{
foreach (object value in distinctValues)
{
if (value != null && value != System.DBNull.Value)
{
object rowValue = value;
object lookupValue = ((GridViewComboBoxColumn)this.DataColumn).GetLookupValue(value);
if (comboBoxColumn.FilteringMode == GridViewFilteringMode.DisplayMember)
{
rowValue = lookupValue;
}
if (lookupValue != null)
{
valuesTable.Add(lookupValue.ToString(), rowValue);
}
}
}
}
else
{
foreach (object value in distinctValues)
{
valuesTable.Add(value);
}
}
return valuesTable;
}
private GridViewColumnValuesCollection GetDistinctValuesWithFilter(GridViewDataColumn column)
{
GridViewColumnValuesCollection distinctValues = new GridViewColumnValuesCollection();
int count = column.OwnerTemplate.ExcelFilteredColumns.Count;
if ((count > 0 &&
column == column.OwnerTemplate.ExcelFilteredColumns[count - 1]) || column.OwnerTemplate.HierarchyLevel > 0)
{
if (count == 1 || column.OwnerTemplate.HierarchyLevel > 0)
{
int index = column.Index;
if (index >= 0)
{
IList<GridViewRowInfo> templateRows = column.OwnerTemplate.Rows;
if (templateRows.Count == 0 && column.OwnerTemplate.Parent != null && column.OwnerTemplate.HierarchyLevel > 0)
{
templateRows = new List<GridViewRowInfo>();
GridViewInfo templateViewInfo = column.OwnerTemplate.MasterViewInfo;
for (int i = 0; i < column.OwnerTemplate.Parent.Rows.Count; i++)
{
GridViewRowInfo parentRow = column.OwnerTemplate.Parent.Rows[i];
((List<GridViewRowInfo>)templateRows).AddRange(column.OwnerTemplate.HierarchyDataProvider.GetChildRows(parentRow, templateViewInfo));
}
}
foreach (GridViewRowInfo row in templateRows)
{
object cellValue = row.Cells[index].Value;
if (!distinctValues.Contains(cellValue))
{
distinctValues.Add(cellValue);
}
}
if (distinctValues.Count > 0)
{
return distinctValues;
}
}
}
}
return distinctValues;
}
}