将一个dataTable拆成多个
2010-06-10 20:38
204 查看
最近遇到一个问题害我郁闷了很久,在一个页面里分类显示数据,每一个大类里的数据是动态取得。打算将它分三列显示,希望得到的效果: 显示成了:
AA CC EE AA CC EE
aaa cc ee aa cc ee
aaa cc ee aa cc ee
BBB cc ee cc ee
bbb cc ee cc ee
bbb DD ee ee
bbb dd FF BB DD FF
ff bbb dd ff
ff bbb ff
思索良久结果发现我是循环大类的dataTable将每一大类放在一个div中,设置他的宽度是整个div 的1/3将它的float属性设为了left,属性margin-top:0px;,结果就成了右边的那样式。查看页面源码时发现BB的那个div的margin-top是针对EE的那个div的。这样就麻烦了,我的将页面划分成左、中、右三块,然后再在每个div中填数据,可是大类就一个dataTable啊。只好将这DataTable拆分三个了。
拆分的步骤如下:
DataTable secClassTb = UserAppClassList(fir_id);//得到大类的DataTable
secClassTb.DefaultView.Sort = "sec_shortening asc";//排序
//为了显示三列
DataTable appTable = new DataTable();
DataTable appTable2 = new DataTable();
DataTable appTable3 = new DataTable();
//qing 添加于6-8,6-10改
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
DataTable dt3 = new DataTable();
DataRow dr;
//将大类的DataTable里的列加入到新建的DataTable中去
foreach (DataColumn c in secClassTb.Columns)
{
dt1.Columns.Add(c.ColumnName, c.DataType);
dt2.Columns.Add(c.ColumnName, c.DataType);
dt3.Columns.Add(c.ColumnName, c.DataType);
}
//将secClassTb拆分成三个DataTable
for (int i=0; i < secClassTb.Rows.Count; i++)
{
object[] rowItems = new object[secClassTb.Columns.Count];
if (i % 3 == 0)
{
//可以用这种方法添加行,因为我没成功,没有用它
//object o1 = secClassTb.Rows.Count>i ? secClassTb.Rows[i].ItemArray : new object[secClassTb.Columns.Count];
// dr = dt1.NewRow();
//dt1.Rows.Add(o1);
dr = dt1.NewRow();
dr["sec_classname"] = secClassTb.Rows[i].ItemArray[0];
dr["sec_shortening"] = secClassTb.Rows[i].ItemArray[1];
dr["id"] = secClassTb.Rows[i].ItemArray[2];
dt1.Rows.Add(dr);
}
else if (i % 3 == 1)
{
dr = dt2.NewRow();
dr["sec_classname"] = secClassTb.Rows[i].ItemArray[0];
dr["sec_shortening"] = secClassTb.Rows[i].ItemArray[1];
dr["id"] = secClassTb.Rows[i].ItemArray[2];
dt2.Rows.Add(dr);
}
else if (i % 3 == 2)
{
dr = dt3.NewRow();
dr["sec_classname"] = secClassTb.Rows[i].ItemArray[0];
dr["sec_shortening"] = secClassTb.Rows[i].ItemArray[1];
dr["id"] = secClassTb.Rows[i].ItemArray[2];
dt3.Rows.Add(dr);
}
}
//排序
dt1.DefaultView.Sort = "sec_shortening asc";
dt2.DefaultView.Sort = "sec_shortening asc";
dt3.DefaultView.Sort = "sec_shortening asc";
//数据源的绑定
repDalei.DataSource = dt1;
repDalei.DataBind();
//DataList1.DataSource = secClassTb;
//DataList1.DataBind();
//循环每个二级分类,获得获得它的所有项
for (int i = 0; i < dt1.Rows.Count; i++)
{
//得到分类的key直
string appDec = dt1.Rows[i].ItemArray[1].ToString();
//得到应用的Table
appTable = InsertDeskTopList(UserAppList(appDec), appDec);//appTable = UserAppList(appDec);
//数据绑定
((DataList)repDalei.Items[i].FindControl("DataList2")).DataSource = appTable;
((DataList)repDalei.Items[i].FindControl("DataList2")).DataBind();
appTable.Clear();
}
//数据源的绑定
repDalei2.DataSource = dt2;
repDalei2.DataBind();
//DataList1.DataSource = secClassTb;
//DataList1.DataBind();
//循环每个二级分类,获得获得它的所有项
for (int i = 0; i < dt2.Rows.Count; i++)
{
//得到分类的key直
string appDec = dt2.Rows[i].ItemArray[1].ToString();
//得到应用的Table
appTable2 = InsertDeskTopList(UserAppList(appDec), appDec);//appTable = UserAppList(appDec);
//数据绑定
((DataList)repDalei2.Items[i].FindControl("DataList3")).DataSource = appTable2;
((DataList)repDalei2.Items[i].FindControl("DataList3")).DataBind();
appTable.Clear();
}
//数据源的绑定
repDalei3.DataSource = dt3;
repDalei3.DataBind();
//DataList1.DataSource = secClassTb;
//DataList1.DataBind();
//循环每个二级分类,获得获得它的所有项
for (int i = 0; i < dt3.Rows.Count; i++)
{
//得到分类的key直
string appDec = dt3.Rows[i].ItemArray[1].ToString();
//得到应用的Table
appTable3 = InsertDeskTopList(UserAppList(appDec), appDec);//appTable = UserAppList(appDec);
//数据绑定
((DataList)repDalei3.Items[i].FindControl("DataList4")).DataSource = appTable3;
((DataList)repDalei3.Items[i].FindControl("DataList4")).DataBind();
appTable.Clear();
}
拆成三个DataTable后分别绑定到页面上后问题就解决了。。。
AA CC EE AA CC EE
aaa cc ee aa cc ee
aaa cc ee aa cc ee
BBB cc ee cc ee
bbb cc ee cc ee
bbb DD ee ee
bbb dd FF BB DD FF
ff bbb dd ff
ff bbb ff
思索良久结果发现我是循环大类的dataTable将每一大类放在一个div中,设置他的宽度是整个div 的1/3将它的float属性设为了left,属性margin-top:0px;,结果就成了右边的那样式。查看页面源码时发现BB的那个div的margin-top是针对EE的那个div的。这样就麻烦了,我的将页面划分成左、中、右三块,然后再在每个div中填数据,可是大类就一个dataTable啊。只好将这DataTable拆分三个了。
拆分的步骤如下:
DataTable secClassTb = UserAppClassList(fir_id);//得到大类的DataTable
secClassTb.DefaultView.Sort = "sec_shortening asc";//排序
//为了显示三列
DataTable appTable = new DataTable();
DataTable appTable2 = new DataTable();
DataTable appTable3 = new DataTable();
//qing 添加于6-8,6-10改
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
DataTable dt3 = new DataTable();
DataRow dr;
//将大类的DataTable里的列加入到新建的DataTable中去
foreach (DataColumn c in secClassTb.Columns)
{
dt1.Columns.Add(c.ColumnName, c.DataType);
dt2.Columns.Add(c.ColumnName, c.DataType);
dt3.Columns.Add(c.ColumnName, c.DataType);
}
//将secClassTb拆分成三个DataTable
for (int i=0; i < secClassTb.Rows.Count; i++)
{
object[] rowItems = new object[secClassTb.Columns.Count];
if (i % 3 == 0)
{
//可以用这种方法添加行,因为我没成功,没有用它
//object o1 = secClassTb.Rows.Count>i ? secClassTb.Rows[i].ItemArray : new object[secClassTb.Columns.Count];
// dr = dt1.NewRow();
//dt1.Rows.Add(o1);
dr = dt1.NewRow();
dr["sec_classname"] = secClassTb.Rows[i].ItemArray[0];
dr["sec_shortening"] = secClassTb.Rows[i].ItemArray[1];
dr["id"] = secClassTb.Rows[i].ItemArray[2];
dt1.Rows.Add(dr);
}
else if (i % 3 == 1)
{
dr = dt2.NewRow();
dr["sec_classname"] = secClassTb.Rows[i].ItemArray[0];
dr["sec_shortening"] = secClassTb.Rows[i].ItemArray[1];
dr["id"] = secClassTb.Rows[i].ItemArray[2];
dt2.Rows.Add(dr);
}
else if (i % 3 == 2)
{
dr = dt3.NewRow();
dr["sec_classname"] = secClassTb.Rows[i].ItemArray[0];
dr["sec_shortening"] = secClassTb.Rows[i].ItemArray[1];
dr["id"] = secClassTb.Rows[i].ItemArray[2];
dt3.Rows.Add(dr);
}
}
//排序
dt1.DefaultView.Sort = "sec_shortening asc";
dt2.DefaultView.Sort = "sec_shortening asc";
dt3.DefaultView.Sort = "sec_shortening asc";
//数据源的绑定
repDalei.DataSource = dt1;
repDalei.DataBind();
//DataList1.DataSource = secClassTb;
//DataList1.DataBind();
//循环每个二级分类,获得获得它的所有项
for (int i = 0; i < dt1.Rows.Count; i++)
{
//得到分类的key直
string appDec = dt1.Rows[i].ItemArray[1].ToString();
//得到应用的Table
appTable = InsertDeskTopList(UserAppList(appDec), appDec);//appTable = UserAppList(appDec);
//数据绑定
((DataList)repDalei.Items[i].FindControl("DataList2")).DataSource = appTable;
((DataList)repDalei.Items[i].FindControl("DataList2")).DataBind();
appTable.Clear();
}
//数据源的绑定
repDalei2.DataSource = dt2;
repDalei2.DataBind();
//DataList1.DataSource = secClassTb;
//DataList1.DataBind();
//循环每个二级分类,获得获得它的所有项
for (int i = 0; i < dt2.Rows.Count; i++)
{
//得到分类的key直
string appDec = dt2.Rows[i].ItemArray[1].ToString();
//得到应用的Table
appTable2 = InsertDeskTopList(UserAppList(appDec), appDec);//appTable = UserAppList(appDec);
//数据绑定
((DataList)repDalei2.Items[i].FindControl("DataList3")).DataSource = appTable2;
((DataList)repDalei2.Items[i].FindControl("DataList3")).DataBind();
appTable.Clear();
}
//数据源的绑定
repDalei3.DataSource = dt3;
repDalei3.DataBind();
//DataList1.DataSource = secClassTb;
//DataList1.DataBind();
//循环每个二级分类,获得获得它的所有项
for (int i = 0; i < dt3.Rows.Count; i++)
{
//得到分类的key直
string appDec = dt3.Rows[i].ItemArray[1].ToString();
//得到应用的Table
appTable3 = InsertDeskTopList(UserAppList(appDec), appDec);//appTable = UserAppList(appDec);
//数据绑定
((DataList)repDalei3.Items[i].FindControl("DataList4")).DataSource = appTable3;
((DataList)repDalei3.Items[i].FindControl("DataList4")).DataBind();
appTable.Clear();
}
拆成三个DataTable后分别绑定到页面上后问题就解决了。。。
相关文章推荐
- C#一个DataSet中存入多个DataTable的方法
- 将一个DataTable分解成多个DataTable
- 将一个DataTable分解成多个DataTable
- 多个DataTable的合并成一个新表
- 将一个DataTable分解成多个DataTable
- 多个DataTable的合并成一个新表
- 多个DataTable的合并成一个新表
- 将一个DataTable分解成多个DataTable
- 同一个敏捷团队如何同时做多个项目?
- 多个判断一起写(做一个只可以输入数字的文本框,并且可以用BACKSPACE的)
- 一个包含3个DataTable对象的DataSet:
- 多个uibutton 只选中其中一个
- 编程有时候我们需要给方法返回一个值 但由于需要返来多个 所有 可以定义一个类
- sql多对多查询统计,一个主题多个关键字,一个关键字多个文章,一个文章多个关键字
- 最长公共子序列,子串(打印一个、打印多个)
- Android 一个apk多个ICON执行入口
- Mut_Project in Solution 将多个项目并到同一个sln中 共享session等等
- Java - 一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?
- linux下同一个tomcat部署多个项目
- 为阿里云ECS服务器二级域名绑定tomcat子目录,实现一个IP多个二级域名