none
请问ListView控件的<ItemTemplate>部分能以编程方式更改吗? RRS feed

  • 问题

  • 就是产品列表有详细和简单2种视图方式。
     我想通过2个按钮来切换显示方式。他们的HTML只有   <ItemTemplate> 部分不同其他都相同,请问老师该怎么实现?
     另外就是在两者之间切换的时候他们的内容应该是相同的只是显示方式不同
    2009年8月17日 8:09

答案

  • ListView 只能有一个 ItemTemplate, 你可以换种思路如:
    <%@ Page Language="C#" AutoEventWireup="true"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
        <script runat="server">
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    this.BindListView();
                }
            }
    
            public void BindListView()
            {
                System.Data.DataTable fDataTable = new System.Data.DataTable();
                fDataTable.Columns.Add("Id");
                fDataTable.Columns.Add("Name");
    
                fDataTable.Rows.Add(new object[] { 1, "Chole" });
                fDataTable.Rows.Add(new object[] { 2, "Mary" });
                fDataTable.Rows.Add(new object[] { 2, "X.X.Y" });
    
                this.ListView1.DataSource = fDataTable;
                this.ListView1.DataBind();
            }
    
            public bool UseSpan
            {
                get 
                {
                    if (Session["UseDefault"] == null)
                        Session["UseDefault"] = true;
                    return (Boolean)Session["UseDefault"];
                }
                set
                {
                    Session["UseDefault"] = value; 
                }
            }
            protected void btnChange_Click(object sender, EventArgs e)
            {
                this.UseSpan = !this.UseSpan;
                this.BindListView();
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ListView ID="ListView1"  runat="server">
            <LayoutTemplate>
                <table align="center">
                    <tr>
                        <td>Id</td>
                        <td>Name</td>
                    </tr>
                    <tr runat="server" id="itemPlaceholder">
                    </tr>
                </table>
            </LayoutTemplate>
            <ItemTemplate>
                <tr>
                    <td><%# this.UseSpan 
                            ? String.Format("<span>use span:{0}</span>", Eval("Id")) 
                            : String.Format("<div> use div :{0} </div>"  , Eval("Id"))%></td>
                    <td><%# this.UseSpan
                            ? String.Format("<span>use span:{0}</span>", Eval("Name"))
                            : String.Format("<div> use div :{0} </div>", Eval("Name"))%></td>
                </tr>
            </ItemTemplate>
        </asp:ListView>
        <asp:Button ID="btnChange" runat="server"  Text="更改显示方式" 
            onclick="btnChange_Click" />
        </form>
    </body>
    </html>


    知识改变命运,奋斗成就人生!
    2009年8月17日 15:48
    版主

全部回复

  • 用 CSS 控制,切换时只需要切换控件的 CSS


    知识改变命运,奋斗成就人生!
    2009年8月17日 12:00
    版主
  • 我在ListView中写了两个ItemTemplate模板 请问可以以编程方式设置其中一个为当前模板吗
    2009年8月17日 13:48
  • 完全可以,ItemTemplate也是可编程设置的
    【孟子E章】
    2009年8月17日 14:18
    版主
  • 请问应该怎么设置,我弄了好长时间没弄好,请老师指点下

    .aspx代码是这样的:
            <asp:ListView ID="ListView1"  runat="server" DataSourceID="SqlDataSource1">
            <LayoutTemplate>
            <div id="itemPlaceHolder" runat="server"></div>
            </LayoutTemplate>
           
            <ItemTemplate>
            <span><%#Eval("ProductID")%></span>
            </ItemTemplate>
           
            <ItemTemplate>
            <div><%#Eval("ProductID")%></div>
            </ItemTemplate>

            </asp:ListView>

    现在listView默认使用的是下面那个,我该怎么做才能让他使用上一个呢?
    2009年8月17日 14:30
  • ListView 只能有一个 ItemTemplate, 你可以换种思路如:
    <%@ Page Language="C#" AutoEventWireup="true"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
        <script runat="server">
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    this.BindListView();
                }
            }
    
            public void BindListView()
            {
                System.Data.DataTable fDataTable = new System.Data.DataTable();
                fDataTable.Columns.Add("Id");
                fDataTable.Columns.Add("Name");
    
                fDataTable.Rows.Add(new object[] { 1, "Chole" });
                fDataTable.Rows.Add(new object[] { 2, "Mary" });
                fDataTable.Rows.Add(new object[] { 2, "X.X.Y" });
    
                this.ListView1.DataSource = fDataTable;
                this.ListView1.DataBind();
            }
    
            public bool UseSpan
            {
                get 
                {
                    if (Session["UseDefault"] == null)
                        Session["UseDefault"] = true;
                    return (Boolean)Session["UseDefault"];
                }
                set
                {
                    Session["UseDefault"] = value; 
                }
            }
            protected void btnChange_Click(object sender, EventArgs e)
            {
                this.UseSpan = !this.UseSpan;
                this.BindListView();
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ListView ID="ListView1"  runat="server">
            <LayoutTemplate>
                <table align="center">
                    <tr>
                        <td>Id</td>
                        <td>Name</td>
                    </tr>
                    <tr runat="server" id="itemPlaceholder">
                    </tr>
                </table>
            </LayoutTemplate>
            <ItemTemplate>
                <tr>
                    <td><%# this.UseSpan 
                            ? String.Format("<span>use span:{0}</span>", Eval("Id")) 
                            : String.Format("<div> use div :{0} </div>"  , Eval("Id"))%></td>
                    <td><%# this.UseSpan
                            ? String.Format("<span>use span:{0}</span>", Eval("Name"))
                            : String.Format("<div> use div :{0} </div>", Eval("Name"))%></td>
                </tr>
            </ItemTemplate>
        </asp:ListView>
        <asp:Button ID="btnChange" runat="server"  Text="更改显示方式" 
            onclick="btnChange_Click" />
        </form>
    </body>
    </html>


    知识改变命运,奋斗成就人生!
    2009年8月17日 15:48
    版主
  • 谢谢,只是我给 ListView用2个ItemTemplate时编译缺没有报错。
    2009年8月18日 0:53
  • 只认最后一个
    知识改变命运,奋斗成就人生!
    2009年8月18日 1:18
    版主