送分及在线等待!!此问题折磨我一上午了,下午还是没什么头绪,上来问问!!!
问题描述:
DataSet里面有一个表,现在把部分的表结构写出来。
---------------------------------
FieldName ... ... ClassName
11 a
12 a
13
14 b
15 a
16
17 b
---------------------------------
ClassName即为前面FieldName的分类,ClassName可能为空。FieldName存储了好多报表的列名。那么上面的结构体现在表单上是这样的:
表头结构:
----------------------------
a | b | | |
-----------|-------| 13 | 16|
11 | 12| 15| 14|17 | | |
----------------------------
现在的问题在于,在不知道ClassName的值的前提下,如何在dataset表中找到ClassName相同的 行 的数目? 以及该ClassName的值?
请大家帮我想想办法啊?
[解决办法]
哦.这个啊。嵌套个子查询.用SUM 求和 做个视图就行了
<td rowspan= " <%=sqlrs( "total ")%> ">
[解决办法]
这个最笨的方法,写个循环遍历一下,再创建一个数组记录一下相应的值,不就出来了
[解决办法]
出现什么问题又不说?是不是排版乱了?
[解决办法]
最笨的方法,用两个不同的的数组
ArrayList altOne=new ArrayList();//用于存FieldName
ArrayList altTwo=new ArrayList();//用于存altOne数组
然后遍历altTwo数组,把它里面的数组拿出来再遍历,要数量可以通过altOne.Count得到
如果你说不知道值的话,在存FieldName时,在前面加上相应的值.
如:altOne.add(thestring+ds.Tables[m].Rows[m][ "FieldName "].ToString());
[解决办法]
如果ClassName的长度不定的话,可以用一些比较特殊的字符(#,$,&等)隔开
然后用split方法把他们拆开来
[解决办法]
更改如:altOne.add(thestring+ds.Tables[0].Rows[m][ "FieldName "].ToString());
thestring为你此次循环的ClassName
[解决办法]
我写给你参考==
不过这种方法,数据量大的话,很耗内存
希望有高人给出更好的方法
[解决办法]
SELECT ClassName,
COUNT(*) AS ClassCount
FROM TableName
GROUP BY ClassName
[解决办法]
using System;
using System.Data;
using System.Configuration;
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;
using System.Collections;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection sqlCOn = new SqlConnection( "Server=.;Database=pubs;uid=sa;pwd= ");
SqlDataAdapter da = new SqlDataAdapter( "select * from test ", sqlCOn);
ArrayList altTwo = new ArrayList();//用于存储altOne和altNull集合
ArrayList altNull = new ArrayList();//用于存储空ClassName的FieldName的集合
DataSet ds = new DataSet();
string thestring= " ";
string Checkedstring= " ";//用于判断此ClassName是否已经判断过,减少判断次数
da.Fill(ds);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
thestring = ds.Tables[0].Rows[i][ "ClassName "].ToString();
if (thestring != " ")
{
if (Checkedstring.Contains(thestring))//是否已经判断过,如果是,以下代码不执行
{
continue;
}
Checkedstring += ds.Tables[0].Rows[i][ "ClassName "].ToString() + "& ";
ArrayList altOne = new ArrayList();//用于存储fieldName;
for (int k = 0; k < ds.Tables[0].Rows.Count; k++)
{
if (ds.Tables[0].Rows[k][ "ClassName "].ToString() == thestring)
{
altOne.Add(thestring + "& " + ds.Tables[0].Rows[k][ "FieldName "].ToString());
}
}
altTwo.Add(altOne);
}
else
{
altNull.Add(ds.Tables[0].Rows[i][ "FieldName "].ToString());//存储空ClassName的FieldName
}
}
altTwo.Add(altNull);//最后加上altNull集合;
//-------以下为输出格式
Response.Write( " <table border= '1 '> <tr> ");
for (int i = 0; i < altTwo.Count-1; i++)
{
ArrayList teampalt = (ArrayList)altTwo[i];
string[] str=teampalt[0].ToString().Split( '& ');
Response.Write( " <td colspan= ' " + teampalt.Count + " '> " + str.GetValue(0) + " </td> ");
}
ArrayList teampnullalt = (ArrayList)altTwo[altTwo.Count-1];
Response.Write( " <td colspan= ' " + teampnullalt.Count + " '> " + "空值 " + " </td> ");
Response.Write( " </tr> <tr> ");
for (int i = 0; i < altTwo.Count - 1; i++)
{
ArrayList teampalt = (ArrayList)altTwo[i];
for (int k = 0; k < teampalt.Count; k++)
{
string[] str=teampalt[k].ToString().Split( '& ');
Response.Write( " <td> "+str.GetValue(1)+ " </td> ");
}
}
for(int i=0;i <teampnullalt.Count;i++)
{
Response.Write( " <td> " + teampnullalt[i].ToString() + " </td> ");
}
Response.Write( " </tr> ");
Response.Write( " </table> ");
}
}