Listview:你认为你知道itemDataBound吗?

时间:2010-05-24 16:17:04

标签: asp.net vb.net listview itemdatabound

在我的网页中,我使用以下内容来填写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事件来实现这一目标吗? 如果这是真的,你能给我一个开始的地方吗?

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()

4 个答案:

答案 0 :(得分: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格式字符串。如果您对数字进行硬编码,则当项目不可见时(可见= false),它们可能会显示不正确。您可以使用CSS

更改li的显示样式

答案 1 :(得分:1)

上面示例的替代方法是使用Ans字段在SQL Select语句中使用ROW_NUMBER()进行连接。

答案 2 :(得分: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++;
        }
    }
}

答案 3 :(得分: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>
相关问题