none
asp.net listview 隐藏列(在线等) RRS feed

答案

  • 你可以使用ItemTemplate模板列,每一个可以设置Visibel=False 来实现,下面是一个拷贝即可看到效果的例子

    <%@ Page Language="C#" Debug="true" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
    
      protected void Page_Load(object sender, EventArgs e)
      {
        ListView1.DataSource = this.CreateDataSourceByXianhuiMeng();
        ListView1.DataBind();
      }
      System.Data.DataView CreateDataSourceByXianhuiMeng()
      {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)));
    
        for (int i = 0; i < 8; i++)
        {
          System.Random rd = new System.Random(Environment.TickCount * i); ;
          dr = dt.NewRow();
          dr[0] = "班级" + i.ToString();
          dr[1] = "【孟子E章】" + i.ToString();
          dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[5] = System.Math.Round(rd.NextDouble() * 100, 2);
          dt.Rows.Add(dr);
        }
        System.Data.DataView dv = new System.Data.DataView(dt);
        return dv;
      }
    
      protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
      {
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
          System.Web.UI.HtmlControls.HtmlTableRow tr = e.Item.FindControl("Tr1") as System.Web.UI.HtmlControls.HtmlTableRow;
          tr.Cells[(new System.Random()).Next(0, 3)].Visible = false;
        }
      }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:ListView ID="ListView1" runat="server" OnItemDataBound="ListView1_ItemDataBound">
        <LayoutTemplate>
          <table cellpadding="2" runat="server" id="tblDepartments" cellspacing="0" border="1">
            <tr runat="server" id="itemPlaceholder" />
          </table>
        </LayoutTemplate>
        <ItemTemplate>
          <tr id="Tr1" runat="server">
            <td><%#Eval("学生班级") %></td><td><%#Eval("学生姓名") %></td><td><%#Eval("语文") %></td><td>
            <%#Eval("数学")%> </td>
          </tr>
        </ItemTemplate>
      </asp:ListView>
      </form>
    </body>
    </html>
    

    孟宪会
    2009年4月12日 12:43
    版主

全部回复

  • ListView自身是没有列这个概念的,你可以通过table来做一个有列的布局,但这个列也仅仅是出现在客户端,服务器端无法通过控件等形式来操作。在客户端的话,你可以通过JavaScript动态调节一列元素的CSS样式,来控制隐藏或显示。
    Microsoft ASP.NET MVP
    2009年4月11日 15:46
    版主
  • ListView自身是没有列这个概念的,你可以通过table来做一个有列的布局,但这个列也仅仅是出现在客户端,服务器端无法通过控件等形式来操作。在客户端的话,你可以通过JavaScript动态调节一列元素的CSS样式,来控制隐藏或显示。
    Microsoft ASP.NET MVP
    javascript 但在源码中还是看得见数据呀!有没有什么好办法解决!
    2009年4月11日 16:15
  • 你可以使用ItemTemplate模板列,每一个可以设置Visibel=False 来实现,下面是一个拷贝即可看到效果的例子

    <%@ Page Language="C#" Debug="true" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
    
      protected void Page_Load(object sender, EventArgs e)
      {
        ListView1.DataSource = this.CreateDataSourceByXianhuiMeng();
        ListView1.DataBind();
      }
      System.Data.DataView CreateDataSourceByXianhuiMeng()
      {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)));
    
        for (int i = 0; i < 8; i++)
        {
          System.Random rd = new System.Random(Environment.TickCount * i); ;
          dr = dt.NewRow();
          dr[0] = "班级" + i.ToString();
          dr[1] = "【孟子E章】" + i.ToString();
          dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[5] = System.Math.Round(rd.NextDouble() * 100, 2);
          dt.Rows.Add(dr);
        }
        System.Data.DataView dv = new System.Data.DataView(dt);
        return dv;
      }
    
      protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
      {
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
          System.Web.UI.HtmlControls.HtmlTableRow tr = e.Item.FindControl("Tr1") as System.Web.UI.HtmlControls.HtmlTableRow;
          tr.Cells[(new System.Random()).Next(0, 3)].Visible = false;
        }
      }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:ListView ID="ListView1" runat="server" OnItemDataBound="ListView1_ItemDataBound">
        <LayoutTemplate>
          <table cellpadding="2" runat="server" id="tblDepartments" cellspacing="0" border="1">
            <tr runat="server" id="itemPlaceholder" />
          </table>
        </LayoutTemplate>
        <ItemTemplate>
          <tr id="Tr1" runat="server">
            <td><%#Eval("学生班级") %></td><td><%#Eval("学生姓名") %></td><td><%#Eval("语文") %></td><td>
            <%#Eval("数学")%> </td>
          </tr>
        </ItemTemplate>
      </asp:ListView>
      </form>
    </body>
    </html>
    

    孟宪会
    2009年4月12日 12:43
    版主
  • 谢谢孟老师的解决办法!学到新东西了!

    2009年4月12日 23:27