ListView: Итак, вы думаете, что вы знаете ItemDatubound?
-
04-10-2019 - |
Вопрос
В моей веб-странице я использую следующее в заполнении управления списком
<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_itemdatubound для этого? Если это правда, не могли бы вы указать мне место для начала?
PS. Просмотр списка заполнен
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()
Решение
Я думаю, что 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>
Если вы хотите использовать подход OniteMDatuound, для вас будет работать следующий обработчик событий:
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++;
}
}
}
Другие советы
<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. Если вы жесткокодируете свои номера, они могут отображаться неправильно, когда элементы не видны (видимы = false). Вы можете изменить стиль отображения Li с помощью CSS
Альтернативой приведенной выше примеру будет объединяться с помощью row_number () в операторе SQL Select с полем Ans.
На основании вашего кода и то, что вы хотите, кажется, похоже на то, что элементные события и элементарные события будут уволены только после того, как будут означать (для меня как минимум), что они не будут отличным местом для добавления этих чисел (если это не будет 1 -6 каждый раз).
Вы уверены, что вы полностью понимаете, как следует использовать ListView? Что вы используете как ваш DataSource для этого 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>