首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

送分及待!此有关问题折磨小弟我一上午了,下午还是没什么头绪,上来问问!

2012-02-22 
送分及在线等待!!此问题折磨我一上午了,下午还是没什么头绪,上来问问!!!问题描述:DataSet里面有一个表,现

送分及在线等待!!此问题折磨我一上午了,下午还是没什么头绪,上来问问!!!
问题描述:
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> ");
}
}

热点排行