帮偶看看asp.net显示表格滴问题哈!-_-!
用asp.net输出
------------------------------
第一 aaaa A 001
002 003
003
bbbb B 001
002
------------------------------
第二 aaa A1 001
002
bbb A2 111
222
333
------------------------------
这样的表格其中每列都是动态的,就好像是个树形滴结构,然后用table滴形式显示出来,第二列是根据第一列得出滴,第三列又是根据第二列得出滴,这样滴表格如何用response.write("<table>")滴方式打出来捏(因为偶一直用这样滴方式输出显示table,觉得比控件灵活),或者有米一个更好滴方法,可以很灵活滴显示出来捏,希望帅哥美女们帮帮忙哈,郁闷死咯!
[解决办法]
可以动态改变数据集。另外可以用你那种方式,只要知道结构,有什么不可以构造出来的?不过那种方式维护起来比较麻烦
[解决办法]
可以用DataList,在<headerTemplate>里写<table>,在<ItemTemplate>里写<tr><td></td></tr>,即表的内容,在<FooterTemplate>里写</table>就形成一个表格了。
[解决办法]
我想我明白你的意思了,为什么不用TreeView控件呢,专门用来显示这种树形结构的数据的。
[解决办法]
用递归做,我整过一个,不过是用Table控件做的,下面是代码
- C# code
private int totalLevel = 1; //最大产品树级数
private DataView dvstore; //表视图
private void DrawTheTable()
{
Tbl2.CssClass = "store";
TableRow tr = new TableRow();
tr.BackColor = Color.Gray;
tr.ForeColor = Color.White;
TableCell tc5 = new TableCell();
TableCell tc1 = new TableCell();
tc5.ColumnSpan = totalLevel;
tc5.Text = "产品类别";
tc5.Width = 100 * totalLevel;
tc1.Text = "产品编号";
tr.Cells.Add(tc5);
tr.Cells.Add(tc1);
Tbl2.Rows.Add(tr);
DrawTheTableRows(dvstore, "0", 0, new TableRow());
}
private void DrawTheTableRows(DataView dv, string parentNo, int level, TableRow tr)
{
dv.Sort = "ParentNo";
DataRowView[] drvs = dv.FindRows(parentNo);
if (drvs.Length > 0)
{
for (int i = 0; i < drvs.Length; i++)
{
TableRow tbr;
if (i != 0)
{
tbr = new TableRow();
}
else
{
tbr = tr;
}
//判断是不是组,需要你自己做算法,比如可以用FindRows方法查看parentno是这个id的记录是是否大于1
if (Convert.ToBoolean(drvs[i]["IsGroup"].ToString()))
{
TableCell tc = new TableCell();
tc.BackColor = GetColor(level);
tc.RowSpan = GetSubProCount(dv, drvs[i]["PNo"].ToString());
tc.Text = drvs[i]["ProName"].ToString() + "—" + drvs[i]["PNo"].ToString();
tbr.Cells.Add(tc);
DrawTheTableRows(dv, drvs[i]["PNo"].ToString(), level + 1, tbr);
}
else
{
for (int j = level; j < totalLevel; j++)
{
TableCell tc = new TableCell();
tbr.Cells.Add(tc);
}
TableCell tc1 = new TableCell();
tc1.Text = drvs[i]["PNo"].ToString();
tbr.Cells.Add(tc1);
Tbl2.Rows.Add(tbr);
}
}
}
else
{
if (parentNo != "0")
{
for (int j = level; j < totalLevel + 1; j++)
{
TableCell tc = new TableCell();
tr.Cells.Add(tc);
}
Tbl2.Rows.Add(tr);
}
}
}
/// <summary>
///
/// </summary>
/// <param name="dv"> </param>
/// <param name="proNo"> </param>
/// <returns> </returns>
private int GetSubProCount(DataView dv, string proNo)
{
dv.Sort = "ParentNo";
DataRowView[] drvs = dv.FindRows(proNo);
int returnCount = 0;
if (drvs.Length > 0)
{
for (int i = 0; i < drvs.Length; i++)
{
if (Convert.ToBoolean(drvs[i]["IsGroup"].ToString()))
{
returnCount += GetSubProCount(dv, drvs[i]["PNo"].ToString());
}
else
{
returnCount += 1;
}
}
}
else
{
returnCount = 1;
}
return returnCount;
}
private void GetLevel(DataView dv,string parentNo,int level)
{
dv.Sort = "ParentNo";
DataRowView[] drvs = dv.FindRows(parentNo);
if (drvs.Length > 0)
{
if (totalLevel < level)
{
totalLevel = level;
}
for (int i = 0; i < drvs.Length; i++)
{
if (Convert.ToBoolean(drvs[i]["IsGroup"].ToString()))
{
GetLevel(dv, drvs[i]["PNo"].ToString(), level + 1);
}
}
}
}
/// <summary>
/// 颜色
/// </summary>
/// <param name="itemIndex"> </param>
/// <returns> </returns>
private Color GetColor(int itemIndex)
{
Color returnColor = new Color();
//string returnColorStr = "";
if (itemIndex == 0)
{
returnColor = Color.FromName("#cccccc");
}
else if (itemIndex == 1)
{
returnColor = Color.FromName("#dfdfdf");
}
else
{
returnColor = Color.FromName("#efefef");
}
return returnColor;
}
protected void btn_st_Click(object sender, EventArgs e)
{
dvstore = GetStoreData(dtn.Year.ToString() + dtn.Month.ToString()).DefaultView; //获取数据
GetLevel(dvstore, "0", 0);
//画图
DrawTheTable();
}
[解决办法]
根据你的情况,我把我写的给修改了下,把多余的字段去掉了,不过我的库里有个字段是isGroup,标注次ID是否是个组,还有就是0是根,不能有ID,具体情况你得自行修改了,代码注释很少,仔细看点吧,效果估计还是能满足你需求的。
[解决办法]
d