DataRepeater отображает разные столбцы в каждой записи

#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 .