在前面做完无限级分类之后,就需要在管理员添加试题了,想了想第一想法就是用TreeView,可是我用的是Vs2003,树型控件是第三方的,也是不好用,管理员录题的时候,选择也是问题,所以第二想法就是在DropDownList中显示树型结构,可是我在原先听说在DropDownLIst显示树形结构,很麻烦,但是由于我在前面用DataGrid显示的时候,那个树形的是自己处理的,这就给我一点点想法,那我可不可以,在我给DropDownList榜定的时候,那个数据源就已经把树形列出来的,那么我绑定的时候那个DataTextValue不就成了树形的吗 ,可是怎么在能在DropDownList绑定的时候的那个数据源已经成树形结构了呢,在网上看看了,突然看到有用临时表的,真是眼前一亮,我给DropDownList绑定临时表多好阿,那个临时表已经成了树形结构了,结合我在前面用DataGrid显示树形的结构,所以就就自己研究了一个在DropDownList中显示树型结构的方法(我现在还不知道别人是不是也用这种做法的^ _ ^),
首先创建临时表
// Power By 兴百放
//Create Time 2007-5-23
#region 创建临时表
public static DataTable CreateTable()
{
DataTable dt = new DataTable();
dt.Columns.Add( new DataColumn( " Column_Id " , typeof ( int )));
dt.Columns.Add( new DataColumn( " Column_Name " , typeof ( string )));
DataRow dr ;
using (SqlDataReader dataReader = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction,CommandType.StoredProcedure, " sp_Column_List " ))
{
while (dataReader.Read())
{
dr = dt.NewRow();
dr[ 0 ] = Convert.ToInt32(dataReader[ " Column_Id " ]);
string columnName = dataReader[ " Column_Name " ].ToString();
string columnTemp = "" ;
int columnDepth = Convert.ToInt32(dataReader[ " Column_Depth " ]);
if (columnDepth > 1 )
{
for ( int i = 1 ;i < columnDepth;i ++ )
{
columnTemp += " |-- " ;
}
columnTemp += " |- " ;
}
dr[ 1 ] = columnTemp + columnName ;
dt.Rows.Add(dr);
}
}
return dt;
}
#endregion
// Power By 兴百放
//Create Time 2007-5-23
//Create Time 2007-5-23
#region 创建临时表
public static DataTable CreateTable()
{
DataTable dt = new DataTable();
dt.Columns.Add( new DataColumn( " Column_Id " , typeof ( int )));
dt.Columns.Add( new DataColumn( " Column_Name " , typeof ( string )));
DataRow dr ;
using (SqlDataReader dataReader = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction,CommandType.StoredProcedure, " sp_Column_List " ))
{
while (dataReader.Read())
{
dr = dt.NewRow();
dr[ 0 ] = Convert.ToInt32(dataReader[ " Column_Id " ]);
string columnName = dataReader[ " Column_Name " ].ToString();
string columnTemp = "" ;
int columnDepth = Convert.ToInt32(dataReader[ " Column_Depth " ]);
if (columnDepth > 1 )
{
for ( int i = 1 ;i < columnDepth;i ++ )
{
columnTemp += " |-- " ;
}
columnTemp += " |- " ;
}
dr[ 1 ] = columnTemp + columnName ;
dt.Rows.Add(dr);
}
}
return dt;
}
#endregion
// Power By 兴百放
//Create Time 2007-5-23
上面用到了我前几节写的 ’用存储过程实现无限级分类‘的存储过程sp_Column_List
下面就是DropDownList绑定了
// Power By 兴百放
//Create Time 2007-5-23
#region 得到分类信息
public static void GetCateInfo(System.Web.UI.WebControls.DataGrid dg)
{
dg.DataSource = SqlHelper.ExecuteDataset(SqlHelper.ConnectionStringLocalTransaction,CommandType.StoredProcedure, " sp_Column_List " );
dg.DataBind();
}
public static void GetCateInfo(System.Web.UI.WebControls.DropDownList dl)
{
dl.DataSource = Exam.Class.DAL.Category.CreateTable();
dl.DataTextField = " Column_Name " ;
dl.DataValueField = " Column_Id " ;
dl.DataBind();
}
#endregion
// Power By 兴百放
//Create Time 2007-5-23
//Create Time 2007-5-23
#region 得到分类信息
public static void GetCateInfo(System.Web.UI.WebControls.DataGrid dg)
{
dg.DataSource = SqlHelper.ExecuteDataset(SqlHelper.ConnectionStringLocalTransaction,CommandType.StoredProcedure, " sp_Column_List " );
dg.DataBind();
}
public static void GetCateInfo(System.Web.UI.WebControls.DropDownList dl)
{
dl.DataSource = Exam.Class.DAL.Category.CreateTable();
dl.DataTextField = " Column_Name " ;
dl.DataValueField = " Column_Id " ;
dl.DataBind();
}
#endregion
// Power By 兴百放
//Create Time 2007-5-23