.NET BindingSource. Фильтр с регулярными выражениями

Используйте радиальный градиент в качестве фона.

.q-rounder {
  background: 
    radial-gradient(farthest-side at bottom right,transparent 94%, #222);
  width: 15px;
  height: 15px;
}

Другой синтаксис с at для лучшей поддержки ( Safari не поддерживает at )

.q-rounder {
  background: 
    radial-gradient(farthest-side,transparent 94%, #222) top left/200% 200%;
  width: 15px;
  height: 15px;
}

5
задан clamp 19 July 2009 в 11:04
поделиться

3 ответа

Вы можете легко запросить DataTable с помощью LINQ, а затем вы можете использовать реальное регулярное выражение в запросе, чтобы фильтровать его по своему усмотрению.

Что-то вроде этого ...

var source = myDataTable.AsEnumerable();

var results = from matchingItem in source
              where Regex.IsMatch(matchingItem.Field<string>("Name"), "<put Regex here>")
              select matchingItem;

//If you need them as a list when you are done (to bind to or something)
var list = results.ToList();

Это предоставит вам строки, которые соответствуют фактическому регулярному выражению, я не знаю, что вам нужно делать с информацией, но это позволит вам получить строки на основе регулярного выражения.

**** Обновить * * - Попытка уточнить на основе комментария

Я не знаю, для чего вы это используете, поэтому у меня нет отличного контекста, но из того, что я могу предположить, вы используете DataTable для привязки данных к сетке или что-то такое. Если это так, я думаю, что вы сможете назначить «список» из фрагмента, который я вставил здесь как DataSource (при условии, что вы используете BindingSource), и я думаю, что это сработает. Я не использую DataTables,

10
ответ дан 18 December 2019 в 09:53
поделиться

BindingSource relies on IBindingListView.Filter for this functionality. The behaviour depends entirely on the specific list implementation. Is this a DataTable/DataView? If so, this maps to DataView.RowFilter, with syntax listed here.

The DataView implementation has no regex support, but supports LIKE via * - i.e. where FilterText is something like "Foo*Bar*". At least, that is my understanding.


I'm still assuming that you are using DataTable/DataView... a pragmatic alternative might be to introduce an extra (bool) column for the purpose. Set/clear that marker as the predicate (using a regex or any other complicated logic), and just use the row-filter to say "where set". Not very clean, maybe, but a lot simpler than implementing a custom data-view / binding-source.


If you are using objects (rather than DataTable), then another option might be the Dynamic LINQ Library. I don't know the full range of what it supports, but it (Where(string)) certainly has some / much of the RowFilter capability. And since the code is available in the sample project, it is possible you could educate it to apply a regex?

5
ответ дан 18 December 2019 в 09:53
поделиться

Комментарий ниже на самом деле не работает:

" ... прагматичной альтернативой может быть введение для этой цели дополнительного (bool) столбца. Установите / очистите этот маркер в качестве предиката (используя регулярное выражение или любую другую сложную логику) и просто используйте фильтр строк, чтобы сказать "где set ". Возможно, не очень чисто, но намного проще, чем реализация пользовательского представления данных / источника привязки." Не знаю, как решить эту проблему.

1
ответ дан 18 December 2019 в 09:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: