在 TreeView 控件中显示分层数据
2007-06-03 21:55
363 查看
1、在web.config文件中创建以下数据库连接字符串
<connectionStrings>
<add name="NorthwindConnectionString" connectionString="Data Source=localhost;Initial Catalog=Northwind;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
2、在Treeview页面中添加以下代码
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
if (e.Node.ChildNodes.Count == 0)
{
switch (e.Node.Depth)
{
case 0:
PopulateCategories(e.Node);
break;
case 1:
PopulateProducts(e.Node);
break;
}
}
}
当用户单击一个节点以打开该节点时,会调用此代码。因为需要在树的不同级别显示不同的数据,所以必须确定用户单击的节点深度,然后适当地填充该级别的节点。在此演练中,如果用户单击根节点(深度为 0),则调用
TreeNodeEventArgs 对象提供对当前节点的编程访问。若要填充节点,请向节点添加元素。在该代码示例中,节点被传递至方法,该方法将添加子节点。
void PopulateCategories(TreeNode node)
{
SqlCommand sqlQuery = new SqlCommand(
"Select CategoryName, CategoryID From Categories");
DataSet resultSet;
resultSet = RunQuery(sqlQuery);
if (resultSet.Tables.Count > 0)
{
foreach (DataRow row in resultSet.Tables[0].Rows)
{
TreeNode NewNode = new
TreeNode(row["CategoryName"].ToString(),
row["CategoryID"].ToString());
NewNode.PopulateOnDemand = true;
NewNode.SelectAction = TreeNodeSelectAction.Expand;
node.ChildNodes.Add(NewNode);
}
}
}
该代码创建 SqlCommand 对象,该对象封装查询的文本。代码将该对象传递至一个随后将要编写的方法,该方法执行数据库查询,并返回 DataSet 对象。此代码然后遍历 DataSet 对象中的记录,并为每条记录创建一个新的节点,以数据库信息设置该节点的文本和值。然后,代码将每个节点的 PopulateOnDemand 属性设置为 true,以使节点在被单击时将引发其 TreeNodePopulate 事件。SelectAction 属性被设置,以使节点在默认情况下展开。
第二级别的节点将显示每个类别的产品。由于此原因,填充产品节点需要参数化查询,以使您能够检索当前类别的产品,并以恰当方式填充子节点。
void PopulateProducts(TreeNode node)
{
SqlCommand sqlQuery = new SqlCommand();
sqlQuery.CommandText = "Select ProductName From Products " +
" Where CategoryID = @categoryid";
sqlQuery.Parameters.Add("@categoryid", SqlDbType.Int).Value =
node.Value;
DataSet ResultSet = RunQuery(sqlQuery);
if (ResultSet.Tables.Count > 0)
{
foreach (DataRow row in ResultSet.Tables[0].Rows)
{
TreeNode NewNode = new
TreeNode(row["ProductName"].ToString());
NewNode.PopulateOnDemand = false;
NewNode.SelectAction = TreeNodeSelectAction.None;
node.ChildNodes.Add(NewNode);
}
}
}
此代码与用以填充类别节点的代码类似。不同之一是 SqlCommand 对象配置有一个参数,在运行时,以用户单击的节点(即选择的类别)的值来设置该参数。另一不同之处是 PopulateOnDemand 属性设置为 false。这导致产品节点显示后不带有展开按钮,这是必须的,因为产品下再没有节点。
private DataSet RunQuery(SqlCommand sqlQuery)
{
string connectionString =
ConfigurationManager.ConnectionStrings
["NorthwindConnectionString"].ConnectionString;
SqlConnection DBConnection =
new SqlConnection(connectionString);
SqlDataAdapter dbAdapter = new SqlDataAdapter();
dbAdapter.SelectCommand = sqlQuery;
sqlQuery.Connection = DBConnection;
DataSet resultsDataSet = new DataSet();
try
{
dbAdapter.Fill(resultsDataSet);
}
catch
{
labelStatus.Text = "Unable to connect to SQL Server.";
}
return resultsDataSet;
}
<connectionStrings>
<add name="NorthwindConnectionString" connectionString="Data Source=localhost;Initial Catalog=Northwind;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
2、在Treeview页面中添加以下代码
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
if (e.Node.ChildNodes.Count == 0)
{
switch (e.Node.Depth)
{
case 0:
PopulateCategories(e.Node);
break;
case 1:
PopulateProducts(e.Node);
break;
}
}
}
当用户单击一个节点以打开该节点时,会调用此代码。因为需要在树的不同级别显示不同的数据,所以必须确定用户单击的节点深度,然后适当地填充该级别的节点。在此演练中,如果用户单击根节点(深度为 0),则调用
PopulateCategories方法。如果用户单击类别名称(深度为 1),则调用
PopulateProducts方法。这些方法在下一节中演示。
TreeNodeEventArgs 对象提供对当前节点的编程访问。若要填充节点,请向节点添加元素。在该代码示例中,节点被传递至方法,该方法将添加子节点。
void PopulateCategories(TreeNode node)
{
SqlCommand sqlQuery = new SqlCommand(
"Select CategoryName, CategoryID From Categories");
DataSet resultSet;
resultSet = RunQuery(sqlQuery);
if (resultSet.Tables.Count > 0)
{
foreach (DataRow row in resultSet.Tables[0].Rows)
{
TreeNode NewNode = new
TreeNode(row["CategoryName"].ToString(),
row["CategoryID"].ToString());
NewNode.PopulateOnDemand = true;
NewNode.SelectAction = TreeNodeSelectAction.Expand;
node.ChildNodes.Add(NewNode);
}
}
}
该代码创建 SqlCommand 对象,该对象封装查询的文本。代码将该对象传递至一个随后将要编写的方法,该方法执行数据库查询,并返回 DataSet 对象。此代码然后遍历 DataSet 对象中的记录,并为每条记录创建一个新的节点,以数据库信息设置该节点的文本和值。然后,代码将每个节点的 PopulateOnDemand 属性设置为 true,以使节点在被单击时将引发其 TreeNodePopulate 事件。SelectAction 属性被设置,以使节点在默认情况下展开。
第二级别的节点将显示每个类别的产品。由于此原因,填充产品节点需要参数化查询,以使您能够检索当前类别的产品,并以恰当方式填充子节点。
void PopulateProducts(TreeNode node)
{
SqlCommand sqlQuery = new SqlCommand();
sqlQuery.CommandText = "Select ProductName From Products " +
" Where CategoryID = @categoryid";
sqlQuery.Parameters.Add("@categoryid", SqlDbType.Int).Value =
node.Value;
DataSet ResultSet = RunQuery(sqlQuery);
if (ResultSet.Tables.Count > 0)
{
foreach (DataRow row in ResultSet.Tables[0].Rows)
{
TreeNode NewNode = new
TreeNode(row["ProductName"].ToString());
NewNode.PopulateOnDemand = false;
NewNode.SelectAction = TreeNodeSelectAction.None;
node.ChildNodes.Add(NewNode);
}
}
}
此代码与用以填充类别节点的代码类似。不同之一是 SqlCommand 对象配置有一个参数,在运行时,以用户单击的节点(即选择的类别)的值来设置该参数。另一不同之处是 PopulateOnDemand 属性设置为 false。这导致产品节点显示后不带有展开按钮,这是必须的,因为产品下再没有节点。
private DataSet RunQuery(SqlCommand sqlQuery)
{
string connectionString =
ConfigurationManager.ConnectionStrings
["NorthwindConnectionString"].ConnectionString;
SqlConnection DBConnection =
new SqlConnection(connectionString);
SqlDataAdapter dbAdapter = new SqlDataAdapter();
dbAdapter.SelectCommand = sqlQuery;
sqlQuery.Connection = DBConnection;
DataSet resultsDataSet = new DataSet();
try
{
dbAdapter.Fill(resultsDataSet);
}
catch
{
labelStatus.Text = "Unable to connect to SQL Server.";
}
return resultsDataSet;
}
相关文章推荐
- ASP.NET - 演练:在 TreeView 控件中显示分层数据
- TreeView 控件用于在树结构中显示分层数据,例如目录或文件目录等
- 使用ASP.NET2.0的TreeView控件显示分层数据
- 使用ASP.NET2.0的TreeView控件显示分层数据
- 我个人认为这个不错------使用ASP.NET2.0的TreeView控件显示分层数据
- 使用ASP.NET2.0的TreeView控件显示分层数据
- HOW TO:使用嵌套 Repeater 控件和 Visual Basic .NET显示分层数据
- 使用嵌套 Repeater 控件和 Visual C# .Net 显示分层数据
- 使用嵌套 Repeater 控件和 Visual C# .Net 显示分层数据
- HOW TO:使用嵌套 Repeater 控件和 Visual C# .Net 显示分层数据
- 使用 asp.net 2.0 自带的TreeView控件显示内联表数据(树状数据)
- 使用嵌套 Repeater 控件和 Visual C# .Net 显示分层数据
- 使用 TreeView 显示分层数据
- [C#] 检索数据库并用DataGridView 控件显示数据.
- 在asp.net中使gridview控件内数据居中显示
- 如何清空串口接收数据显示框(EDIT控件)的数据
- 利用Repeater控件实现数据分页显示
- C#中使用DataGridView控件显示DataTable中的数据
- jquery的表格控件jqGrid对自定义json数据的显示补丁
- 使用DataTable绑定DataGridView后,鼠标点击DataGridView控件时才会显示数据?