有一个数据表定义(ID、行、列、只读、数据类型、内容)几个字段,如何在ASP.net里面动态根据这个数据表内容生成一个DateGrid??

解决方案 »

  1.   

    让一个Grid的数据源指向你这个DataTable不可以吗?
    可以AutoGenerateRow之类的属性设置为true
      

  2.   

    DataGrid本来就是根据数据源动态生成的呀
      

  3.   

    只接将AutoGenerateRow之类的属性设置为true的话怎么改它的列名呢?
      

  4.   

    贴个动态的例子
    private static void CreateCommercePackDataGrid(DataGrid vardg)
    {
    RefreshGrid(vardg);

    BoundColumn dc = new BoundColumn();
    dc.HeaderText = "产品";
    dc.HeaderStyle.Wrap = false;
    dc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    dc.DataField = "PACK_NAME";
    dc.SortExpression = "PACK_NAME";
    vardg.Columns.AddAt(2,dc); dc = new BoundColumn();
    dc.HeaderText = "品种目录";
    dc.HeaderStyle.Wrap = false;
    dc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    dc.DataField = "CATALOG_NAME";
    dc.SortExpression = "CATALOG_NAME";
    vardg.Columns.AddAt(3,dc); dc = new BoundColumn();
    dc.HeaderText = "供应商名称";
    dc.HeaderStyle.Wrap = false;
    dc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    dc.DataField = "BAK_MANU_NAME";
    dc.SortExpression = "BAK_MANU_NAME";
    vardg.Columns.AddAt(4,dc); dc = new BoundColumn();
    dc.HeaderText = "用户名称";
    dc.HeaderStyle.Wrap = false;
    dc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    dc.DataField = "BAK_BIDDER_NAME";
    dc.SortExpression = "BAK_BIDDER_NAME";
    vardg.Columns.AddAt(5,dc);

    TemplateColumn  tc = new TemplateColumn();
    tc.ItemTemplate = new ColumnTemplateForView();
    tc.HeaderText = "票数";
    tc.HeaderStyle.Wrap = false;
    tc.SortExpression = "VOTECOUNT";
    tc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    tc.ItemStyle.HorizontalAlign = HorizontalAlign.Right;
    vardg.Columns.AddAt(6,tc);
    }
      

  5.   

    myDr = myNewsClass.ShowNews();
    if(ViewState["Sort"].ToString() == "")
      ViewState["Sort"] = "id desc";
    myDr.Sort = ViewState["Sort"].ToString();
    DataGridNews.DataSource = myDr;
    DataGridNews.DataBind();
      

  6.   

    不是啊,数据库表是这样的:ID   行  列  只读  数据类型  内容
                              1    1    1   0     数字      1
                              2    1    2   1     文字      我
                              3    1    3   1     文字      你
                              4    1    4   1     逻辑      否根据这个数据表在DateGrid里面生成一个表出来,内容: 1  我  你 否                         
      

  7.   

    不好意思,可能我写得不清楚,上面那个表我只是举个例子。我的主管叫我搞这个也出来,我想来想去没头绪,来请教大家。
    意思是这样的,我在数据库里面定义一个数据表,这个数据表记录动态生成DateGrid的信息的,分别是行、列、只读、数据类型、具体内容几个字段。最终DateGrid可以根据这个数据表,读取数据,比如上面数据表定义DateGrid里面第一行的四个列,每个列数据类型,和每个列里面的内容,生成DateGrid第一行的内容就是“1   我   你   否”。
    明白嘛??请指点一下具体点做?
      

  8.   

    可不可以先读出这个表的数据,取出"内容",然后手动生成一个Table,根据"内容"里面的数据条数生成列数,然后将这个表绑定到DataGrid上?试试?
      

  9.   

    select id as 编号, name as 姓名 from table1用as别名
      

  10.   

    假设你有一个表叫tempDt,里面有如下数据:
    -------------------------------------
    ID   行  列  只读  数据类型  内容
    1    1    1   0     数字      1
    2    1    2   1     文字      我
    3    1    3   1     文字      你
    4    1    4   1     逻辑      否
    -------------------------------------DataTable dt=new DataTable();for(int i=0;i<tempDt.Rows.Count;i++)
    {
    dt.Columns.Add(tempDt.Rows[i]["内容"].ToString());
    }
    dataGrid1.DataSource=dt;以上代码未经调试,不过大概想法是这样,楼主自己试试吧
      

  11.   

    在ItemDataBound事件里面就可以处理
      

  12.   

    你是不是要做打印,我用的是HTML语句来画DataGrid然后打印,效果还可以...
      

  13.   

    以上各位写的代码都没能达到预期效果,还是自己写花佐大半年时间已通过编译,代码如下:
    private void GetSqlTableToDynamicTable( )
    {  
    //读取SQL表
    dsTest.Clear();
    this.adpTest.Fill(dsTest.Test);
    this.conn.Close();
    //创建一个动态表格
    DataSet ds = new DataSet();
    DataTable tbl = new DataTable("DynamicTable");
    ds.Tables.Add(tbl);
    //设置动态生成表的列数
    int col  = 4;
    //动态创建4列
    for (int i = 0;i < col;i++)
    {
    DataColumn  column = new DataColumn();
    //设置列是否只读
    string readOnly =dsTest.Test.Rows[i]["只读"].ToString();
    if (bool.Parse(readOnly) == true )
        column.ReadOnly = true;
    else
        column.ReadOnly = false;

    //设置列的类型
    switch(dsTest.Test.Rows[i]["数据类型"].ToString())
    {
    case "Int":
         column.DataType = System.Type.GetType("System.Int32");
         break;
    case "String":column.DataType = System.Type.GetType("System.String");
         break;
    case "Boolean":column.DataType = System.Type.GetType("System.Boolean");
         break;
    }
    tbl.Columns.Add(column);
    }
    //动态插入记录条数
    int rows = dsTest.Test.Rows.Count / col;
    //i代表插入动态表记录数,j代表动态表列数,k代表SQL数据表第几条记录
    int k = 0;
    for(int i=0;i<rows;i++)
    {  
    DataRow myRow = tbl.NewRow();
    for(int j=0;j<col;j++)
    {
    myRow[j] = dsTest.Test.Rows[k]["值"].ToString();
    k = k + 1;
    }
    tbl.Rows.Add(myRow);
    }
    //绑定DataGrid
    this.dgTest.DataSource = ds.Tables["DynamicTable"];
    this.DataBind();
    }
      

  14.   

    属性AutoGenerateRow = true
      

  15.   

    不是,AutoGenerateRow = true,是根据数据库表的列,动态生成一一对应的表出来。这个是一个好简单的功能。但我现在不是要输出数据库里面的表的列,而是通过读取数据库表的数据(比如数据库定义生成4 x 3的一个表格,即四列三行的数据表),动态先构造一个DataTable,然后再绑定DataGrid。这样就可以达到目的。但现在这些生成的表的每一列怎么设样色?