首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

百分一个关于treeview的奇怪有关问题

2012-02-05 
百分求助一个关于treeview的奇怪问题我想做一个treeview的分级下载比如说:教委清华计算机一班张三李四二班

百分求助一个关于treeview的奇怪问题
我想做一个treeview的分级下载
比如说:
  教委
  清华
  计算机
  一班
  张三
  李四
  二班
  北大
  文法
  1班
  王五
  赵六

数据库中,有三张表,一张是学校名,一张是所有学校的所有院系(每个院系有个学校代码),还有一张班级列表(有院系代码)
我是根据treeview1.selectednode.depth来判断,是哪一个级别的,到对应的表中去读取,目前点击学校名可以加载院系,但是如果在点击院系会在判断深度的时候报错
switch (TreeView1.SelectedNode.Depth.ToString())这句话报错,说对象没有实例化

代码如下
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
  {
  OracleConnection conn = new OracleConnection();
  conn.ConnectionString = "data source=School;user id=School;password=School";

  conn.Open();

  switch (TreeView1.SelectedNode.Depth.ToString())
  {
  case "1":
  string tmp1 = TreeView1.SelectedNode.Text;
  string sql = "select DXBH from DX_DMB where DXMC ='" + tmp1 + "'";
  OracleDataAdapter dataAdapterDP1 = new OracleDataAdapter(sql, conn);
  DataSet dsDP1 = new DataSet();
  dataAdapterDP1.Fill(dsDP1);
  string tmpDXBH = dsDP1.Tables[0].Rows[0]["DXBH"].ToString();

  string sql2 = "select YXMC from YX_DMB where DXBH = '" + tmpDXBH + "'";
  OracleDataAdapter dataAdapterDP12 = new OracleDataAdapter(sql2, conn);
  DataSet dsDP12 = new DataSet();
  dataAdapterDP12.Fill(dsDP12);

  if (dsDP12.Tables["table"].Rows.Count != 0)
  {
  for (int i = 0; i < dsDP12.Tables["table"].Rows.Count; i++)
  {
  TreeNode nodeYX = new TreeNode();
  nodeYX.Text = dsDP12.Tables[0].Rows[i]["YXMC"].ToString();
  TreeView1.SelectedNode.ChildNodes.Add(nodeYX);
  TreeView1.SelectedNode.Expanded = true;
  }
  TreeView1.DataBind();
  }
  break;

  case "2":
  break;
  }

点击清华,因为depth=1,所以会进入case "1",然后加载院系,但是再点击加载后的院系的名称就会报错

[解决办法]
Depth.ToString()换成level
根节点是0
类推
[解决办法]
asp.net?
那就搞错了
[解决办法]
asp.net?winform?
[解决办法]
asp?????????
[解决办法]
TreeView.Level(winform),

[解决办法]
怀疑 是不是在新增节点后,TreeView1.SelectedNode变成了新增的那个节点!
[解决办法]
真是奇怪
鼠标能点到,就说明TreeView1.SelectedNode.Depth有值.就不应该报对象没实例化.

还都一点不明白,为什么要加 TreeView1.DataBind(); 页面刷新后,节点就会显示,为什么还要DataBind?

你试试重新生成网站试试,我遇到怪问题都是这么解决的
[解决办法]
发个例子 可以参考下
private void uwtTemplate_AddNodes()
{
int i;
Node clsNode;
UltraWebTree uwtTemplate;



if (mdsTemplateLayer.Tables.Count <= 0)
{
return;
}

uwtTemplate = (UltraWebTree)this.wgbTemplate.FindControl("uwtTemplate");

mdsTemplateLayer.Tables[0].DefaultView.RowFilter = "LNUM=1";

for(i=0;i<mdsTemplateLayer.Tables[0].DefaultView.Count;i++)
{
clsNode = new Node();

clsNode.Text = mdsTemplateLayer.Tables[0].DefaultView[i]["L_NAME"].ToString();
clsNode.Tag = mdsTemplateLayer.Tables[0].DefaultView[i]["L_CODE"];

uwtTemplate.Nodes.Add(clsNode);

this.Recursion_TemplateNodesAdded(2,clsNode);
}

uwtTemplate.ExpandAll();
}

private void Recursion_TemplateNodesAdded(int intLNum,Node clsNode)
{
int i;
Node clsChildNode;
DataTable dtTemplateLayer;

if (mdsTemplateLayer.Tables.Count <= 0)
{
return;
}

dtTemplateLayer = mdsTemplateLayer.Tables[0].Copy();

dtTemplateLayer.DefaultView.RowFilter = "LNUM=" + intLNum + " AND L_CODE LIKE '" + clsNode.Tag.ToString() + "%'";

for(i=0;i<dtTemplateLayer.DefaultView.Count;i++)
{
clsChildNode = new Node();

clsChildNode.Text = dtTemplateLayer.DefaultView[i]["L_NAME"].ToString();
clsChildNode.Tag = dtTemplateLayer.DefaultView[i]["L_CODE"];

clsNode.Nodes.Add(clsChildNode);

this.Recursion_TemplateNodesAdded(intLNum+1,clsChildNode);
}
}

[解决办法]
TreeNode rootNodeOfClassA = treeView1.Nodes[0];
foreach (TreeNode nodeOfClassB in rootNodeOfClassA.Nodes)
foreach (TreeNode nodeOfClassC in nodeOfClassB.Nodes)



用这种方式去获取 节点的值 , 再进行向数据库里查询, 在用同样的方法 Add进去
[解决办法]
我总觉得好像问题是出在楼主没有贴出来的代码里面...
建议楼主不要把焦点范围搞得太小,把与此相关的代码都检查一遍,很可能是其它什么事件把SelectedNode给清空掉了.

[解决办法]
給你個Infragistics中的Tree的例子看看 類似

C# code
 protected void treeDept_NodeSelectionChanged(object sender, WebTreeNodeEventArgs e)    {        e.Node.Nodes.Clear();        string ibo = Convert.ToString(treeDept.SelectedNode.Tag);//treeDept樹的名稱        DataTable dt = new DataTable();        dt = new CIMUserUCO().GetUserSelect(ibo);//得到資料        if (dt.Rows.Count > 0)        {            for (int i = 0; i < dt.Rows.Count; i++)            {                Node node = new Node();                if (!string.IsNullOrEmpty(Convert.ToString(dt.Rows[i]["USER_GUID_COUNT"])))                {                    node.Text = Convert.ToString(dt.Rows[i]["NAME"]) + "<font color='Red'>(" + Convert.ToString(dt.Rows[i]["USER_GUID_COUNT"]) + ")</font>";                }                else                {                    node.Text = Convert.ToString(dt.Rows[i]["NAME"]);                }                e.Node.Nodes.Add(node);                 treeDept.ExpandAll();            }        }            } 

热点排行