先看一下我的效果图,跟数据库设计吧;我要做出来的效果图:大小编号跟产品数量关联,价格字段就在这里面我要能生成一张行,列都是可以动态了!比如我增加产品数量时,表格列自动增长一个;增加大小编号时;行自动增加一行;现在动态生成DataTable可以实现!但我不知要怎么写出来!如果有其它比较好的方法也可以提出来啊!...假如你帮我解决的;我这号还有一百分到时我想办法也给你;

解决方案 »

  1.   

    你不是说已经实现动态生成datatable了么
    无非就是读取数据
      

  2.   

    现在动态生成DataTable可以实现!但我不知要怎么写出来!我是说要怎么动态生成DataTable;   因为我知道动态生成DataTable就可以实现这个功能啊;不好意思啊我没说明白啊;
      

  3.   

    编辑问题:
    我要能生成一张行,列都是可以动态了!比如我增加产品数量时,表格列自动增长一个;增加大小编号时;行自动增加一行;现在我要怎么动态生成DataTable!!如果有其它比较好的方法也可以提出来啊!...假如你帮我解决的;我这号还有一百分到时我想办法也给你;
      

  4.   


    增加一列
     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]="数据";
      

  5.   

    sql 实现行转列
    http://topic.csdn.net/u/20101108/20/4d7bb842-033b-4546-b71a-69b7bc23e4ec.html
      

  6.   

    这是哥不久前写的
    第一列有自增效果
    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();
      

  7.   

    dataTable 添加列再
    DataRow dr=Dt.NewRow();
    dr[""]="";
    ....
    dt.rows.Add(dr);
      

  8.   

    这样可以实现
     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;
        }
      

  9.   

    上面 DataTable tb = this.GetTb(5);
    这里应该是这样
    DataTable tb = this.GetTb(tbPhotoNum.rows.count );
      

  10.   

    又发现点错误绑定数据的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);//绑定了一行值之后再填入表
            }
      

  11.   

    用sql语句进行行列转换,应该能实现
      

  12.   

    使用数据库数据类型 xml,这种数据类型较灵活,不需要动态字段
      

  13.   

    用 Repeater 实现。
      

  14.   

    <asp:Repeater>
        <th>绑定列</th>
    </asp:Repeater>
    <asp:Repeater>
         Size(行)
    </asp:Repeater>
      

  15.   

    我觉得直接在代码中拼凑datatable更容易些,我们有些统计表都是这么实现的
    先生成一个datatable里面存放的是列名,从T_photoNum中取值,再生成一个表里面存放的是行名,在T_Paintsize中取值,然后把列名的表转成列,最后利用行和列为条件在表T_photo_size中取值显示就可以了
      

  16.   

    不好意思 我先问你个问题,
    你的行是根据产品编号表来的,那这样的话 通过大小编号跟产品数量关联表 得到关系后
    每个产品编号 对应的数量 是否都一样呢?
    举例一下:如第一行 对应的产品数量是10 
    第2行 对应的产品量是15  那你这个动态表要多难看的。。1行有11列 2行16列。如果你的产品数量是固定的 所有编号的都相同 那就很好拼sql了 否则得话 最笨的办法就是存储过程内用循环做
    最好不要页面去操作内存的table 效率低不说 赋值的话不方便 
      

  17.   

    单纯实现动态行列的话  只要你列数固定的话好做 给你个列子 
    例如你的表内产品数量为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;