先看一下我的效果图,跟数据库设计吧;我要做出来的效果图:大小编号跟产品数量关联,价格字段就在这里面我要能生成一张行,列都是可以动态了!比如我增加产品数量时,表格列自动增长一个;增加大小编号时;行自动增加一行;现在动态生成DataTable可以实现!但我不知要怎么写出来!如果有其它比较好的方法也可以提出来啊!...假如你帮我解决的;我这号还有一百分到时我想办法也给你;
调试欢乐多
无非就是读取数据
我要能生成一张行,列都是可以动态了!比如我增加产品数量时,表格列自动增长一个;增加大小编号时;行自动增加一行;现在我要怎么动态生成DataTable!!如果有其它比较好的方法也可以提出来啊!...假如你帮我解决的;我这号还有一百分到时我想办法也给你;
增加一列
DataTable td = new DataTable();
td.Columns.Add("列名");
如有数据
for (int i = 0; i < td.Rows.Count; i++)
{
td.Rows[i]["列名"]="数据";
}
增加一行
int cou=td.Rows.Count;
for(int i=0;i<td.Columns.Count; i++)
td.Rows[cou][i]="数据";
http://topic.csdn.net/u/20101108/20/4d7bb842-033b-4546-b71a-69b7bc23e4ec.html
第一列有自增效果
DataTable MyTable = new DataTable();
DataColumn dc = MyTable.Columns.Add("Index", Type.GetType("System.Int32"));
dc.AllowDBNull = false;
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 1;
dc.AutoIncrementStep = 1;
MyTable.Columns.Add("StartCity", Type.GetType("System.String"));
MyTable.Columns.Add("EndCity", Type.GetType("System.String"));
MyTable.Columns.Add("MinCost", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine1", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine2", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine3", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine4", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine5", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine6", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine7", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine8", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine9", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine10", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine11", Type.GetType("System.String"));
MyTable.Columns.Add("DtdDeadLine12", Type.GetType("System.String"));
MyTable.Columns.Add("Memo", Type.GetType("System.String"));
Session["tableAirItemPriceMain"] = MyTable;
GVAirItemPriceMain.DataSource = MyTable;
GVAirItemPriceMain.DataBind();
DataRow dr=Dt.NewRow();
dr[""]="";
....
dt.rows.Add(dr);
protected void Page_Load(object sender, EventArgs e)
{
//读取出表T_PhotoNum表中记录到表 tbPhotoNum
//读取出表T_Paintsize数据到表 tbPaintSize
//读取出表T_Photo_Size数据到表 tbPhotoSize
//传参 tbPhotoNum.rows.count 动态生成临时表
DataTable tb = this.GetTb(5);
DataRow tr; //先生成首行,列名
tr = tb.NewRow();
tr["PhotoSize"] = "Size";
for (int k = 0; k < tbPhotoNum.Rows.count; k++)
{
int p = k + 1;
tr["Col" + p.ToString()] = tbPhotoNum.Rows[k]["PhotoNum"].tostring();
}
tr = tb.Rows.Add(tr);
//下面是绑定数据
for (int i = 0; i < tbPaintSize.rows.count; i++)//外循环Paintsize
{
tr = tb.NewRow();
tr["PhotoSize"] = tbPaintSize.rows[i]["PaintSize"].tostring();
for (int j = 0; j < tbPhotoNum.Rows.count; j++)//内循环PhotoNum
{
int p = j + 1;
DataRow [] findR=tbPhotoSize.select("SizeID="+Convert.ToInt32( tbPaintSize.rows[i]["Id"].tostring())
+" and Photoid="+Convert.ToInt32( tbPhotoNum.rows[i]["Id"].tostring()));
if (findR.Length > 0)
{
tr["Col" + p.ToString()] = findR[0]["PhotoPrice"].ToString();
}
else
{
tr["Col" + p.ToString()] = "";
}
tb.Rows.Add(tr);
}
} //将tb值绑定到gridview
this.GridView1.DataSource = tb;
this.GridView1.DataBind();
this.GridView1.HeaderRow.Visible = false;//标题行生成,原来遍体行要隐藏
} private DataTable GetTb(int N)
{
DataTable tb = new DataTable();
DataColumn col; col = new DataColumn();
col.DataType = System.Type.GetType("System.String");
col.ColumnName = "PhotoSize";
tb.Columns.Add(col); for(int i=1;i<=N;i++)
{
col = new DataColumn();
col.DataType = System.Type.GetType("System.String");
col.ColumnName = "COL" + i.ToString();
tb.Columns.Add(col);
} return tb;
}
这里应该是这样
DataTable tb = this.GetTb(tbPhotoNum.rows.count );
改成如下
//下面是绑定数据
for (int i = 0; i < tbPaintSize.rows.count; i++)//外循环Paintsize
{
tr = tb.NewRow();
tr["PhotoSize"] = tbPaintSize.rows[i]["PaintSize"].tostring();
for (int j = 0; j < tbPhotoNum.Rows.count; j++)//内循环PhotoNum
{
int p = j + 1;
DataRow [] findR=tbPhotoSize.select("SizeID="+Convert.ToInt32( tbPaintSize.rows[i]["Id"].tostring())
+" and Photoid="+Convert.ToInt32( tbPhotoNum.rows[i]["Id"].tostring()));
if (findR.Length > 0)
{
tr["Col" + p.ToString()] = findR[0]["PhotoPrice"].ToString();
}
else
{
tr["Col" + p.ToString()] = "";
}
}
tb.Rows.Add(tr);//绑定了一行值之后再填入表
}
<th>绑定列</th>
</asp:Repeater>
<asp:Repeater>
Size(行)
</asp:Repeater>
先生成一个datatable里面存放的是列名,从T_photoNum中取值,再生成一个表里面存放的是行名,在T_Paintsize中取值,然后把列名的表转成列,最后利用行和列为条件在表T_photo_size中取值显示就可以了
你的行是根据产品编号表来的,那这样的话 通过大小编号跟产品数量关联表 得到关系后
每个产品编号 对应的数量 是否都一样呢?
举例一下:如第一行 对应的产品数量是10
第2行 对应的产品量是15 那你这个动态表要多难看的。。1行有11列 2行16列。如果你的产品数量是固定的 所有编号的都相同 那就很好拼sql了 否则得话 最笨的办法就是存储过程内用循环做
最好不要页面去操作内存的table 效率低不说 赋值的话不方便
例如你的表内产品数量为10
拼sql:
1.查询产品数量表得到10并赋给一个变量
2.定义一个字符串:string sSQl="select 产品编号 ";
for(int i=1;i<=产品数量变量;i++)
{
sSQL +=",产品价格 as "+i+"Figures ";
}
sSQL +=" from 大小编号表 left join 关联表 on 关联表.编号表ID=大小编号表.ID ";执行sql
获得table;