日期:2014-05-18  浏览次数:20458 次

CheckBoxList的数据绑定问题
学习asp.net,参照例子使用数据绑定自动填充CheckBoxList,数据库里有表
name       sex       age
张三         男         23
李四         男         24
赵六         女         20
用的DataSet,填充什么都不用说了,它的本意是把列名   name     ,sex   ,age   绑定到CheckBoxList上,但是用了
CheckBoxList1.DataSource=ds.Table[0].DefaultView;
CheckBoxList1.DataValueField=ds.Table[0].Columns[0].ColumnName;
CheckBoxList1.DataTextField=ds.Table[0].Columns[0].ColumnName;
CheckBoxList1.DataBind();
这样结果绑定的内容是   张三,李四,赵六
只是第一列的内容。不过明明这样写虽然不能实现最初目的,但是也应该是显示列名name才对啊,为什么会显示出内容来
不想用循环,如何使用DataValueField和DataTextField属性一次把列名绑定填充上?
直接用ds.Table[0].Columns.ToString()提示DataBind没有ColumnsCollection的属性。

------解决方案--------------------
DataSet是用来取数据的,你绑列名用它有些浪费..
------解决方案--------------------
不过是什么类型的数据库,都有些系统表或者系统视图存放这些源数据的,SQL Server中INFORMATION_SCHEMA.COLUMNS系统视图显示所有表的所有列

给个Demo

private void BindGrid()
{
SqlConnection cn = new SqlConnection(@ "server=.\SQLExpress;uid=sa;pwd=password;database=pubs ");
string strSQL = "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'authors ' ";
SqlCommand cmd = new SqlCommand(strSQL, cn);
cn.Open();
CheckBoxList1.DataSource = cmd.ExecuteReader();
CheckBoxList1.DataTextField = "COLUMN_NAME ";
CheckBoxList1.DataBind();
cn.Close();
}

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
}