#c# #asp.net #data-binding #repeater
#c# #asp.net #привязка к данным #повторитель
Вопрос:
У меня есть Repeater
. Он получает данные из некоторой таблицы. В этой таблице, скажем, 3 столбца.
Чего я хочу, так это если column1 = true, то будет отображаться column2, и если column1 = false, то будет отображаться столбец 3.
Макет будет примерно таким:
c1 = true | c2
c1 = true | c2
c1 = false | c3
c1 = true | c2
c1 = false | c3
Как я могу этого добиться?
Ответ №1:
Просто используя Literal
в вашем Repeater
шаблоне:
<asp:Repeater runat="server" ID="rep">
<ItemTemplate>
<asp:Literal runat="server" ID="lit1" OnDataBinding="lit1_DataBinding"></asp:Literal>
</ItemTemplate>
</asp:Repeater>
Затем реализуйте DataBinding
:
protected void lit1_DataBinding(object sender, System.EventArgs e)
{
Literal lit = (Literal)(sender);
lit.Text = ((bool)(Eval("Column1")) ?
Eval("Column2").ToString() : Eval("Column3").ToString();
}
Ответ №2:
Вы можете делать все декларативно, без использования кода:
<asp:Repeater runat="server" ID="rpt">
<ItemTemplate>
<%# (bool)Eval("Column1") ? Eval("Column2") : Eval("Column3") %><br />
</ItemTemplate>
</asp:Repeater>
Комментарии:
1. Элисон, это здорово. Что делать, если Column1 не является bool?
2. Не проблема. Что такое Column1? Судя по вашему вопросу, похоже, что Column1 был bool.
3. Именно по этой причине я редко когда-либо добавляю какую-либо логику в разметку и использую
OnDataBinding
метод. Затем вы можете сделать код настолько сложным, насколько вам нравится. Да, вы можете сделать это в разметке, но это создает логику и код в вашей презентации, чего я стараюсь избегать. Очень мало причин, по которым вам нужен код C # в вашем aspx-коде IMO.4. Элисон . Column1 — это строка, и она представляет тип. У меня есть два типа, представленные двумя другими столбцами. Итак, если тип1 записан в column1, будет отображаться только column2 . На самом деле, у меня есть много типов. Вот почему я не могу использовать bool .