Мне нужно добавить функцию фильтра в свой DataGridView. Я пытаюсь использовать библиотеку DataGridViewAutoFilter сегодня, но она не работает для моего приложения Winform, если я использую desinger для изменения типа столбца на DataGridViewAutoFilterTextBoxColumn
, как мне было сказано в документе. посмотрел на образец DataGridViewAutoFilter sample.Я думаю, что есть некоторая проблема в привязке источника данных. Я привязываю свой источник данных следующим образом:
The DisplayedInfo is the metedata object I am using to store the infomation. my binding code is
Ilist infos = new List();
infos = GetAllInfosFromServer();
displayedInfoBindingSource = infos;
I think I can't use type List
here as my data source cause the document of DataGridViewAutoFilter indicate that BindingSource
component must be bound to anIBindingListView
.
The sample project of DataGridViewAutoFilter bind data source like this:
About the newDataSet
,it seems like a coustom component,I don't quiet get it how it works.It looks like this on designer:
You can get sample projects here: образец URL загрузки . Итак, как мне изменить свой код, чтобы он работал как образец?
Я пытаюсь преобразовать свой List
в IBindingListView
орудие, например Equin.ApplicationFramework.BingdingListView
, но все равно не работает. пожалуйста !! Вот мой код конвертации:
public class AdvancedListHelper
{
public static BindingListView<DisplayedInfo> ListToBindableList(IList<DisplayedInfo> infos)
{
if (infos == null)
{
return null;
}
BindingListView<DisplayedInfo> advancedInfos = new BindingListView<DisplayedInfo>((List<DisplayedInfo>)infos);
return advancedInfos;
}
}
Я обнаружил проблему с DataGridViewAutoFilter
. Вы не можете изменить FilteringEnabled
на true в дизайнере. Я не знаю почему, но я добавляю это код для моей формы winform:
foreach (DataGridViewColumn col in columns)
{
if (col is DataGridViewAutoFilter.DataGridViewAutoFilterTextBoxColumn)
{
var c = col as DataGridViewAutoFilter.DataGridViewAutoFilterTextBoxColumn;
var cell = c.HeaderCell;
if (cell is DataGridViewAutoFilter.DataGridViewAutoFilterColumnHeaderCell)
{
var ce = cell as DataGridViewAutoFilter.DataGridViewAutoFilterColumnHeaderCell;
ce.FilteringEnabled = true;
}
}
}
Теперь я могу сделать кнопку «Фильтр» видимой, но когда я нажимаю кнопку, я получаю необработанное исключение, в котором говорится: System.NotSupportedException: Cannot set filter from строковое выражение. * 10 23 * Думаю, это проблема Equin.ApplicationFramework.BingdingListView
. Так что сейчас мне действительно нужен класс для замены Equin.ApplicationFramework.BingdingListView
. Есть идеи?