我想要实现以下形式的报表,该如何做呢?序号?  性别 ? 人数?  百分比? 
1    男    148  49.33% 
2    女    152  50.67% 点击一个分组就出现这个分组的详细信息。
比如,在这个例子中,点击“男”就会显示所有男生的信息,
而且在此页中所要显示的字段由用户来定义(web方式)谢谢!

解决方案 »

  1.   

    问题还没有解决,难道没有会的吗?着急ing
      

  2.   

    鼠标on move事件...用户自定义?什么关系...
      

  3.   

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="b.aspx.cs" Inherits="b" %><!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 runat="server">
    <title>无标题页</title>
    <style>
    .ptbl{width:400px;background-color:#000}
    .ptbl tr{background-color:#fff}
    .ptbl td{text-align:center;}
    </style>
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    //展开或隐藏函数
    function expend(obj,flag)
    {
        var chld = obj.parentNode.nextSibling;
        if(flag=="+")
        {
            obj.innerText="-";
            chld.style.display="block";
        }else
        {
            obj.innerText="+";
            chld.style.display="none";
        }
    }
    var arr=[];//存放显示列//checkbox click事件
    function changeCol(ischecked,colIndex)
    {
        if(ischecked)
        {
            arr.push(colIndex);
            arr.sort();
        }else
        {
            var m = arr.indexOf(colIndex);
            delete arr[m];
        }
        
        resetChildGrid();
    }//数组查找函数
    function Array.prototype.indexOf(val)
    {
        for(var i=0;i<this.length;i++)
        {
            if(this[i]==val) return i;
        }
        return -1;
    }//显示隐藏列
    function resetChildGrid()
    {
        var chldTbls= document.getElementsByTagName("table");
        for(var i=0;i<chldTbls.length;i++)
        {
            if(chldTbls[i].className=="ctbl")
            {
                for(var j=0;j<chldTbls[i].rows.length;j++)
                {
                    for(var k=0;k<chldTbls[i].rows[j].cells.length;k++)
                    {
                        var cell = chldTbls[i].rows[j].cells[k];
                        cell.style.display=arr.indexOf(k)!=-1?"block":"none";
                   
                    }
                }
            }
        }
        
    }//onload初始化存放显示列数组arr
    window.onload=function()
    {
        var chkTbl = document.getElementById("ColumnsNames");
        var cells = chkTbl.rows[0].cells;
        for(var i=0;i<cells.length;i++)
        {
            arr.push(i);
        }
        
    }// ]]>
    </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        自定义列:<asp:CheckBoxList runat="server" ID="ColumnsNames" RepeatDirection="Horizontal"></asp:CheckBoxList>
            <asp:Repeater runat="server" ID="RptParent" OnItemDataBound="RptParent_ItemDataBound">
                <HeaderTemplate>
                    <table  class="ptbl" cellpadding="0" cellspacing="1">
                    <tr>
                        <th width="20px"></th>
                        <th  width="30%">性别</th>
                        <th  width="30%">人数</th>
                        <th>百分比</th>
                    </tr>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <td style="cursor:pointer" onclick="expend(this,this.innerText)">+</td>
                        <td><%# Convert.ToInt32(Eval("Sex"))==0?"男":"女" %></td>
                        <td><%# Eval("Peosons")%></td>
                        <td><%# Eval("percent")%></td>
                    </tr>
                    <tr style="display:none">
                        <td></td>
                        <td colspan="3">
                                <asp:Repeater runat="server" ID="RptChld">
                                    <HeaderTemplate>
                                        <table width="100%" class="ctbl">
                                        <tr>
                                            <th>Name</th>
                                            <th>Sex</th>
                                            <th>Age</th>
                                            <th>Address</th>
                                        </tr>
                                    </HeaderTemplate>
                                    <ItemTemplate>
                                        <tr >
                                            <td><%# Eval("Name") %></td>
                                            <td><%# Convert.ToInt32(Eval("Sex"))==0?"男":"女" %></td>
                                            <td><%# Eval("Age") %></td>
                                            <td><%# Eval("Address") %></td>
                                       </tr>
                                    </ItemTemplate>
                                    <FooterTemplate>
                                        </table>
                                    </FooterTemplate>
                                </asp:Repeater>
                            
                        </td>
                     </tr>       
                   
                </ItemTemplate>
                <FooterTemplate>
                     </table>
                </FooterTemplate>
            </asp:Repeater>
        </div>
        </form>
    </body>
    </html>
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class b : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                this.RptParent.DataSource = this.GroupSource;
                this.RptParent.DataBind();
                int m = 0;
                foreach (DataColumn col in DTLSource.Columns)
                {
                    ListItem list = new ListItem(col.ColumnName);
                    list.Selected = true;
                    list.Attributes.Add("onclick", "changeCol(this.checked,'" + m.ToString() + "')");
                    ColumnsNames.Items.Add(list);
                    m++;
                }
            }
            
        }    /// <summary>
        /// 汇总
        /// </summary>
        private DataTable GroupSource
        {
            get
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Sex", typeof(int));
                dt.Columns.Add("Peosons", typeof(int));
                dt.Columns.Add("percent", typeof(string));
                dt.Rows.Add(0, 2,"40%");
                dt.Rows.Add(1, 3, "60%");
                return dt;
            }
        }    /// <summary>
        /// 明细
        /// </summary>
        private DataTable DTLSource
        {
            get 
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Name", typeof(string));
                dt.Columns.Add("Sex", typeof(int));
                dt.Columns.Add("Age", typeof(int));
                dt.Columns.Add("Address", typeof(string));            dt.Rows.Add("A1",0,28,"上海");
                dt.Rows.Add("A2", 0, 22, "江苏");
                dt.Rows.Add("B1", 1, 21, "浙江");
                dt.Rows.Add("B2", 1, 22, "山东");
                dt.Rows.Add("B3", 1, 27, "广州");
                return dt;
            }
        }    protected void RptParent_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType== ListItemType.AlternatingItem)
            {
                int sex =(int)((DataRowView)e.Item.DataItem)["Sex"] ;
                Repeater chld = e.Item.FindControl("RptChld") as Repeater;
                DataView dv = new DataView(this.DTLSource);
                dv.Sort = "Sex";
                dv.RowFilter = "Sex="+sex.ToString();
                chld.DataSource = dv;
                chld.DataBind();
                
            }
        }
    }
      

  4.   

    哦,忘记说了,我用的是水晶报表,我想实现的是
    序号 性别  人数  百分比
    1    男    148  49.33% 
    2    女    152  50.67% 点击一个分组就出现这个分组的详细信息。 
    比如,在这个例子中,点击“男”就会显示所有男生的信息,而且用户可以从一组CheckBoxList中选择几个想要显示的字段,假如用户选择“姓名”、“年级”、“年龄”(即开始提到的“字段由用户自定义”),即显示如下:姓名 年级 年龄
    王刚  3    15
    从容  4    16  
    ......(共148条记录)
      

  5.   

    To CutBug:
    前辈您好厉害啊!
    只是我用水晶报表的是,这要怎么来实现呢?
      

  6.   

    可以参考下
    在水晶报表中实现任意选择指定字段显示(Asp.net+c#版) 
    http://www.cnblogs.com/babyt/archive/2008/05/13/1195583.html要花点精力,呵呵