Всем привет. Имею такую задачу: у меня есть gridcontrol и есть DataTable, которая для грида есть DataSource. Таблица представляет собой свод неких данных по поездкам. Я хочу добавить возможность фильтрации данных. Допустим, у меня есть три комбобокса - пользователи, статус поездки, город отправления. При выборе значения в каждом боксе - меняется фильтр для набора данных. К сожалению ничего более умного чем примерно такой вариант, я не придумал:
DataView dv = new DataView(Tables.dtTrips);
dv.RowFilter = (!string.IsNullOrEmpty(dv.RowFilter) ? dv.RowFilter + " and " : string.Empty) + "id_trip_state='" + id_state.ToString() + "'";
И такой код на изменение значения в каждом боксе. Фильтров может быть много, они могут меняться, а могут после добавления и быть отменены. Соответственно, вопрос - верный ли выбран путь. Если верный, второй вопрос - допустим мы выбрали пользователя в боксе, добавилась строка к фильтру "id_natural='" + u_id.tostring() + "'". если затем снова сменить юзера, то такая же строка но с другим айди просто добавится, что неправильно. Соответственно было решено юзать регулярное выражение, которое будет находить значение в одинарных кавычках после id_natural= , но как я не пробовал писать регулярку, у меня пока не получилось
Если кому интересно, в итоге написал класс для этой цели: Тут конкретно по моим требованиям.
public static class TripFilters
{
static Dictionary<string, string> trips_filters = new Dictionary<string, string>();
// Добавление, изменение, или удаление записи
public static void Refresh(string key,string value)
{
if (string.IsNullOrEmpty(value))
{
trips_filters.Remove(key);
return;
}
if (!trips_filters.ContainsKey(key))
trips_filters.Add(key, value);
else
trips_filters[key] = value;
}
// Получаем итоговый фильтр для DataView
public static string GetFilterString()
{
string res = string.Empty;
string condition = string.Empty;
foreach (var x in trips_filters)
{
switch (x.Key)
{
case "date_from":
condition = ">=";
break;
case "date_to":
condition = "<=";
break;
default:
condition = "=";
break;
}
res += (string.IsNullOrEmpty(res) ? string.Empty : " and ") + string.Format("{0}{1}'{2}'",x.Key.Contains("date")?"date":x.Key,condition,x.Value);
}
return res;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Довольно часто встречается понятие модели в терминах, например, MVC или ORMНо что это такое ?
Завис я над таким вопросом, чтобы поставить интервал от и до, типа так:
Есть необходимость задавать текстовую маску для двух компонентов разных типовКаждый из них эту возможность поддерживает