Member 13484654 Ответов: 2

Как можно использовать оператор if else в datatable


но это не сработает
я храню данные в viestaete
и я использую dropdownlist для фильтрации записей
теперь моя проблема заключается в том, что когда выпадающий список выбора индекса равен нулю, то показать все записи, другие мудрые показать только выбор записи

Что я уже пробовал:

<pre> DataTable dt = (DataTable)ViewState["dtQueAns"];
        DataView dv = new DataView(dt);
        dv.RowFilter = "if Date =0 then Date else Date ='" + Date.ToString("dd/MM/yyyy") + "'";
        dt = dv.ToTable();
        rptEvantlog.DataSource = dt;
        rptEvantlog.DataBind();

2 Ответов

Рейтинг:
1

Maciej Los

Пожалуйста, ознакомьтесь с документацией, особенно Замечания: DataView.Свойство RowFilter (System.Data) | Microsoft Docs[^]

RowFilter принимает выражение, поэтому оно должно содержать имя столбца и значение, например:

dv.RowFilter = "DateOfTransaction=#{ProperDate}#";

Другими словами, вы можете построить свое собственное выражение таким образом:
string s = DropDown1.SelectedIndex==0 ? DateTime.Today.ToString("d") : DropDown1.Value.ToString("d");
dv.RowFilter = string.Format("DateColumn=#{0}#", s); 



Для получения более подробной информации, пожалуйста, смотрите:
объект DataColumn.Свойство Выражения (System.Data) | Microsoft Docs[^]
значение datetime.Дата Имущества (Системы) | Майкрософт Документы[^]


Рейтинг:
0

OriginalGriff

Фильтры строк не могут включать "внешние значения": они не имеют доступа к переменным в вашей программе. Таким образом, хотя вы можете включить текущее значение выделения в свой фильтр, если оно изменится, это не повлияет на отображение, если вы не измените строку фильтра.

Начните с непосредственного использования представления:

private DataView dv = null;
...
dv = new DataView(dt);
...
rptEvantlog.DataSource = dv;
Затем вы можете установить фильтр строк в событии SelectionChanged для вашего выпадающего списка:
dv.RowFilter = $"{index} = 0 OR Date = #{matchDate}#";