我想要实现以下形式的报表,该如何做呢?序号? 性别 ? 人数? 百分比?
1 男 148 49.33%
2 女 152 50.67% 点击一个分组就出现这个分组的详细信息。
比如,在这个例子中,点击“男”就会显示所有男生的信息,
而且在此页中所要显示的字段由用户来定义(web方式)谢谢!
1 男 148 49.33%
2 女 152 50.67% 点击一个分组就出现这个分组的详细信息。
比如,在这个例子中,点击“男”就会显示所有男生的信息,
而且在此页中所要显示的字段由用户来定义(web方式)谢谢!
解决方案 »
- 有没有必要dispose一个链接,还是只close掉就好?
- RadioButtonList重定向的问题
- 我点网页下端按扭,在按扭处就出现个文本框,但现在点一下,页面就回滚到最上端,还得拉滚动条才能看见哪个文本框
- 模板列中radiobuttonlist从数据库绑定,有回递事件发生时出现问题,谢谢各位!
- 屏蔽掉另存为事件
- 谁有用过asp.net 和openfire服务器开发webim(Web即时通讯),跪求asp.net 连接openfire服务器方法。
- 在线等待!请帮忙!
- 状态管理建议(页面间参数传递)
- 在数据库中删除信息的问题~有源程序~~只有一点小问题,没有找出来?
- 各位都看什么书来学习.net的?
- 关于多个Web.config文件
- 上下键选中gridview显示模板中的textbox控件进行输入工作
<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();
}
}
}
序号 性别 人数 百分比
1 男 148 49.33%
2 女 152 50.67% 点击一个分组就出现这个分组的详细信息。
比如,在这个例子中,点击“男”就会显示所有男生的信息,而且用户可以从一组CheckBoxList中选择几个想要显示的字段,假如用户选择“姓名”、“年级”、“年龄”(即开始提到的“字段由用户自定义”),即显示如下:姓名 年级 年龄
王刚 3 15
从容 4 16
......(共148条记录)
前辈您好厉害啊!
只是我用水晶报表的是,这要怎么来实现呢?
在水晶报表中实现任意选择指定字段显示(Asp.net+c#版)
http://www.cnblogs.com/babyt/archive/2008/05/13/1195583.html要花点精力,呵呵