关于TreeView无限分类帮顶的问题

kouti 2008-07-03 03:27:11
遇到了这么个问题,最近用TreeView绑定无限分类时,当点最后一个节点触发TreeView1_SelectedNodeChanged事件的时候无法获得TreeView1.SelectedValue的值。显示到页面的TreeView却是完全正确的。当点击其他节点后再点击最后一个节点,又可以获得TreeView1.SelectedValue的值了。用的是从网上查到的函数。很有意思,请遇到同样问题,并解决的朋友帮一下忙。

public void BindCategoryTreeVew(TreeView treeView, bool isExpanded, string sSelectedData)
{
string sqlcmd = "select * from fjdh_urlKind";

//将获取的数据转换为 一个DataTable
DataTable dt = dbase.db.GetDataset(sqlcmd).Tables[0];
treeView.Nodes.Clear();//清空树的所有节点
//获取与排序顺序中的筛选器以及指定的状态相匹配的所有System.Data.DataRow 数组

DataRow[] rowList = dt.Select("parentid=0");
foreach (DataRow row in rowList)
{
TreeNode rootNode = new TreeNode();
rootNode.Text = "<b>" + row["kName"].ToString() + "</b>";
rootNode.Value = row["ID"].ToString();
rootNode.Expanded = isExpanded;
rootNode.Selected = true;
//rootNode.NavigateUrl = "../bigclass.aspx?id=" + rootNode.Value.ToString();
treeView.Nodes.Add(rootNode);
CreateChildNode(rootNode, dt, isExpanded, sSelectedData);
}
}

private void CreateChildNode(TreeNode parentNode, DataTable dt, bool isExpanded, string sSelecedData)
{
//选择数据,添加排序表达式
DataRow[] rowList = dt.Select("ParentID=" + Convert.ToInt32(parentNode.Value));
foreach (DataRow row in rowList)
{
//创建一个新的节点了
TreeNode node = new TreeNode();
node.Text = row["kName"].ToString();
node.Value = row["ID"].ToString();
node.Expanded = isExpanded;
//node.SelectAction = TreeNodeSelectAction.None;

//node.NavigateUrl = "../smallclass.aspx?id=" + node.Value.ToString();

if (node.Value == sSelecedData)
{
node.Selected = true;
}
parentNode.ChildNodes.Add(node);
//递归调用,创建其他节点
CreateChildNode(node, dt, isExpanded, sSelecedData);
}
}
另外请教一下sSelectedData参数是什么意思,我在程序了将 sSelectedData的值等于了""对不对?
谢谢!!
...全文
103 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinglecat 2008-07-06
  • 打赏
  • 举报
回复
另外请教一下sSelectedData参数是什么意思,我在程序了将 sSelectedData的值等于了""对不对?

===========

->>

if (node.Value == sSelecedData) // 用在这里了,假如该节点的 Value 等于 指定值就选中!
{
node.Selected = true;
}



5207 2008-07-06
  • 打赏
  • 举报
回复
呵。这个问题很简单呀。

其函数中的sSelectedData参数就是指在创建节点时如果是默认节点就设置为选中状态。

至于事件的触发应该有事件锁地。
kouti 2008-07-04
  • 打赏
  • 举报
回复
靠,原来很简单,仔细看过代码以后发现问题了。
public void BindCategoryTreeVew(TreeView treeView, bool isExpanded, string sSelectedData)
{
string sqlcmd = "select * from fjdh_urlKind";

//将获取的数据转换为 一个DataTable
DataTable dt = dbase.db.GetDataset(sqlcmd).Tables[0];
treeView.Nodes.Clear();//清空树的所有节点
//获取与排序顺序中的筛选器以及指定的状态相匹配的所有System.Data.DataRow 数组

DataRow[] rowList = dt.Select("parentid=0");
foreach (DataRow row in rowList)
{
TreeNode rootNode = new TreeNode();
rootNode.Text = " <b>" + row["kName"].ToString() + " </b>";
rootNode.Value = row["ID"].ToString();
rootNode.Expanded = isExpanded;
rootNode.Selected = true;
//rootNode.NavigateUrl = "../bigclass.aspx?id=" + rootNode.Value.ToString();
treeView.Nodes.Add(rootNode);
CreateChildNode(rootNode, dt, isExpanded, sSelectedData);
}
}
其中rootNode.Selected = true; 循环到最后,会让最后一个节点被选中,当然不会触发TreeView1_SelectedNodeChanged事件了,大家以后用的时候要小心了。
dengchenlu 2008-07-04
  • 打赏
  • 举报
回复
没遇到过

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧