有一个数据表定义(ID、行、列、只读、数据类型、内容)几个字段,如何在ASP.net里面动态根据这个数据表内容生成一个DateGrid??
解决方案 »
- 多重引号如何解决?
- 页面中使用ReportViewer发布到服务器后不能正常使用
- 求一【正则表达式】 取 img src 值
- ============关于移动公司选择手机号的几个问题,想请教一下!
- 求教,怎么样清空客户机的缓存?
- 开发控件,如何给属性添加默认值?
- 急!储存过程
- 【求助】提示为 “内存溢出Microsoft JET Database Engine”
- 如何通过后台代码控制css样式的链接"<link rel="stylesheet" href="/aa.css">"
- [超级菜问题]为什么我的页面不能显示?!
- 某字段的值为" <aaaa>" 把该字段绑到gd控件, 该 值不能显示出来,怎样才能显示它?
- 怎么样定义datagrid的行高?
可以AutoGenerateRow之类的属性设置为true
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);
}
if(ViewState["Sort"].ToString() == "")
ViewState["Sort"] = "id desc";
myDr.Sort = ViewState["Sort"].ToString();
DataGridNews.DataSource = myDr;
DataGridNews.DataBind();
1 1 1 0 数字 1
2 1 2 1 文字 我
3 1 3 1 文字 你
4 1 4 1 逻辑 否根据这个数据表在DateGrid里面生成一个表出来,内容: 1 我 你 否
意思是这样的,我在数据库里面定义一个数据表,这个数据表记录动态生成DateGrid的信息的,分别是行、列、只读、数据类型、具体内容几个字段。最终DateGrid可以根据这个数据表,读取数据,比如上面数据表定义DateGrid里面第一行的四个列,每个列数据类型,和每个列里面的内容,生成DateGrid第一行的内容就是“1 我 你 否”。
明白嘛??请指点一下具体点做?
-------------------------------------
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;以上代码未经调试,不过大概想法是这样,楼主自己试试吧
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();
}