listView:所以您认为您知道itemDatabound吗?
-
04-10-2019 - |
题
在我的网页中,我使用以下内容来填写ListView控件
<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事件来实现这一目标吗?如果那是真的,您能指出我一个起点吗?
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>
如果您想使用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++;
}
}
}
其他提示
<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(订购列表)。然后,您将列表元素作为评估格式字符串的一部分。如果您的数字进行了硬码,则它们在不可见(可见= false)时可能会错误地显示。您可以使用CSS更改LI的显示样式
上面示例的一种替代方法是使用ANS字段中的SQL Select语句中使用Row_number()进行concat。
根据您的代码以及您想要显示的内容,似乎只能触发Item Databound事件,而ItemDatabound事件只会被释放一次,这至少对我来说不会是添加这些数字的好地方(除非是1 -6每次)。
您确定您完全了解应该如何使用listView吗?您使用什么作为此listView的数据源?
如果您确定按照想要的方式设置了所有设置,则可以将1-6的硬码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>
不隶属于 StackOverflow