2010-05-24 3 views
0

В моей странице я использую следующий в порядке заполнения элемента спискаListview: Итак, вы думаете, что знаете itemDataBound?

<asp:ListView ID="ListView1" runat="server"> 
<layouttemplate> 
<asp:PlaceHolder id="itemPlaceholder" runat="server" /></layouttemplate> 
<ItemTemplate> 
<tr> 
      <td><asp:Label ID="Label1" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans1") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans1Visible") %>'></asp:Label> 
       <br /> 
       <asp:Label ID="Label2" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans2") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans2Visible") %>'></asp:Label> 
       <br /> 
       <asp:Label ID="Label3" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans3") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans3Visible") %>'></asp:Label> 
       <br /> 
       <asp:Label ID="Label4" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans4") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans4Visible") %>'></asp:Label> 
       <br /> 
       <asp:Label ID="Label5" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans5") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans5Visible") %>'></asp:Label> 
       <br /> 
       <asp:Label ID="Label6" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans6") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans6Visible") %>'></asp:Label> 
      </td> 
     </tr> 
</ItemTemplate> 
</asp:ListView> 

Теперь я хотел бы добавить номер этикетки, прежде чем они визуализируются.

Например в настоящее время данные являются как

Tennis 
Football 
Basketball 
Nfl 
Nba 
Polo 

и выхода я хотел бы иметь это

1. Tennis 
2. Football 
3. Basketball 
4. Nfl 
5. Nba 
6. Polo 

Могу я использовать ListView1_ItemCreated или событие ListView1_ItemDataBound для достижения этой цели? Если это правда, не могли бы вы указать мне место для начала?

P.S. представление списка заполняется с

Dt = GetDataTable("SELECT Ans1, Ans2,Ans3,Ans4,Ans5,Ans6, Ans1Visible,Ans2Visible,Ans3Visible,Ans4Visible,Ans5Visible,Ans6Visible, From myTable WHERE CatID ='" & cat & "'") 
     ListView1.DataSource = Dt 
     ListView1.DataBind() 
+0

ли содержание должны отображаться в таблице? Использование ol (упорядоченный список), а не таблица позволит браузеру автоматически генерировать номера для вас. Мне также было бы интересно узнать, как выглядит ваша структура данных, поскольку кажется, что вы используете ListView для представления одной строки данных. – GShenanigan

+0

Yeap, они должны отображаться в таблице (здесь вы видите упрощенную версию) – OrElse

+0

Итак, чтобы прояснить структуру данных: у вас есть запрос, который возвращает несколько записей, каждый из которых содержит Ans1, Ans2, Ans3 ... и Ans1Visible, Ans2Visible ... и т. Д. Затем у вас есть несколько строк таблицы, каждый из которых содержит этот список из 6 элементов? Просто пытаюсь получить более четкое представление о цели. – GShenanigan

ответ

1

Я думаю, что josephj1989 находится на правильном пути, но отсутствует код строки таблицы, который вы указали в своих комментариях.

Полное решение было бы что-то вроде этого:

<asp:ListView ID="ListView1" runat="server"> 
    <LayoutTemplate> 
    <asp:PlaceHolder id="itemPlaceholder" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
    <tr> 
     <td> 
     <ol> 
      <asp:Literal ID="Literal1" runat="server" Text = '<%# Eval("Ans1","<li>{0}</li>") %>' Visible = '<%# Eval("Ans1Visible") %>' /> 
      <asp:Literal ID="Literal2" runat="server" Text = '<%# Eval("Ans2","<li>{0}</li>") %>' Visible = '<%# Eval("Ans2Visible") %>' /> 
      <asp:Literal ID="Literal3" runat="server" Text = '<%# Eval("Ans3","<li>{0}</li>") %>' Visible = '<%# Eval("Ans3Visible") %>' /> 
      <asp:Literal ID="Literal4" runat="server" Text = '<%# Eval("Ans4","<li>{0}</li>) %>' Visible = '<%# Eval("Ans4Visible") %>' /> 
     </ol> 
     </td> 
    </tr> 
    </ItemTemplate> 
</asp:ListView> 

Если Вы желаете использовать OnItemDataBound подход, следующий обработчик события будет работать для вас:

protected void lvData_OnItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    int count = 1; 

    foreach (Literal lit in e.Item.Controls.OfType<Literal>()) 
    { 
     if (lit.Visible) 
     { 
      lit.Text = String.Format("{0}. {1}", count.ToString(), lit.Text); 
      count++; 
     } 
    } 
} 
0

на основе кода и то, что вы хотите отобразить это, кажется, как itemCreated и ItemDataBound события будет срабатывать только один раз, который будет означать (для меня по крайней мере), что они не будут быть отличным местом для добавления этих чисел (если это не будет 1-6 каждый раз).

Вы уверены, что полностью понимаете, как использовать ListView? Что вы используете в качестве источника данных для этого ListView?

Если вы уверены, что у вас есть все настройки так, как вы хотели бы вы могли бы просто жёстко 1-6 в разметке:

<tr> 
      <td>1:<asp:Label ID="Label1" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans1") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans1Visible") %>'></asp:Label> 
       <br /> 
       2:<asp:Label ID="Label2" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans2") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans2Visible") %>'></asp:Label> 
       <br /> 
       3:<asp:Label ID="Label3" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans3") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans3Visible") %>'></asp:Label> 
       <br /> 
       4:<asp:Label ID="Label4" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans4") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans4Visible") %>'></asp:Label> 
       <br /> 
       5:<asp:Label ID="Label5" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans5") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans5Visible") %>'></asp:Label> 
       <br /> 
       6:<asp:Label ID="Label6" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans6") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans6Visible") %>'></asp:Label> 
      </td> 
     </tr> 
+0

Элемент ItemCreated и ItemDataBound не запускаются один раз, так как они заполняются базой данных – OrElse

+0

. На основе вашего вывода они запускаются только один раз, если вы не делаете каждую метку в записи, невидимой с этой строкой: Visible = '<% # DataBinder.Eval (Container.DataItem, «Ans1Visible»)%> '. Это то, что происходит? –

+0

Также, если эти данные поступают из базы данных, это может помочь увидеть структуру базовых таблиц. Я подозреваю, что у вас могут быть некоторые проблемы с нормализацией, которые могут быть причиной чрезмерной сложности. –

1

Альтернативой приведенного выше примера будет Concat с использованием ROW_NUMBER() в оператор SQL Select с полем Ans.

2
<asp:ListView ID="ListView1" runat="server"> 
    <layouttemplate> 
    <asp:PlaceHolder id="itemPlaceholder" runat="server" /></layouttemplate> 
    <ItemTemplate> 
    <ol> 

<asp:Literal ID="Label1" runat="server" Text = '<%# Eval("Ans1","<li>{0}</li>") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans1Visible") %>'></asp:Label> 

<asp:Literal ID="Label2" runat="server" Text = '<%# Eval("Ans2","<li>{0}</li>") %>' Visible = '<%# Eval(Container.DataItem, "Ans2Visible") %>'></asp:Label> 

<asp:Literal ID="Label3" runat="server" Text = '<%# DataBinder.Eval("Ans3","<li>{0}</li>") %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans3Visible") %>'></asp:Label> 

<asp:Label ID="Label4" runat="server" Text = '<%# Eval("Ans4","<li>{0}</li>) %>' Visible = '<%# DataBinder.Eval(Container.DataItem, "Ans4Visible") %>'></asp:Label> 
</ol> 
    </ItemTemplate> 
    </asp:ListView> 

Вы лучше использовать OL (нумерованный список) .Затем можно создавать элементы списка как часть Eval строки формата . Если вы производите жесткие коды своих номеров, они могут отображаться некорректно, если элементы не отображаются (visible = false). Вы можете изменить стиль отображения li с помощью CSS

+0

Я восхищаюсь тем, как вы! – OrElse