还有就是怎么样在代码中引用NavigateUrl和Target这里个属性!也就是我在程序的page_load执行的时候不设置这两个属性!等到获得某个数据之后再设置这两个属性!

解决方案 »

  1.   

    将你点击TreeView事件的处理代码贴出来
      

  2.   

    还有DataGrid的DataBind()方法放在什么地方的?
      

  3.   

    <%@ Page Language="vb" Debug="true" culture="zh-cn" %>
    <%@ Import Namespace = "System.IO" %>
    <%@ Import Namespace = "System.Data.SqlClient" %>
    <%@ Import Namespace = "System.Data" %>
    <%@ Import Namespace = "System.Web.UI" %>
    <%@ Import Namespace = "System.Web" %>
    <%@ Import Namespace = "Microsoft.Web.UI.WebControls" %>
    <%@ Register TagPrefix = "iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
    <HTML>
    <HEAD>
    <title>treeview</title>
    <script runat="server" language="vb">
    Protected WithEvents TreeView1 As Microsoft.Web.UI.WebControls.TreeView
    'TABLE Nodes : ID, Nod_Id_1, Nod_Id_2, Nod_Id_3, Nod_Tit, Nod_Url, Nod_Lev, Nod_Dept, Nod_Auth, Nod_Date, Nod_MenDim myConn As SQLConnection
    Dim mySQLString As String = "SELECT * FROM Nodes Where Nod_Id_1 > 1 order by Nod_Id_1,Nod_Id_2,Nod_Id_3"Sub Page_Load(Src As Object, E As EventArgs)
    DBBind
    End SubSub DataConn
    myConn = New SQLConnection(Application("myweb_ConnectionString"))
    End SubSub DBBind
    Dim Nodes_1 As TreeNode
    Dim Nodes_2 As TreeNode
    Dim Nodes_3 As TreeNode
    Dim DRNodes As DataRow
    myConn = New SQLConnection(Application("web_ConnectionString")) Dim myAdapter As New SQLDataAdapter(mySQLString,myConn)
    Dim myDataSet As New DataSet()
    myAdapter.Fill(myDataSet,"Nodes")
    'myDataGrid.DataSource = myDataSet
    'myDataGrid.DataBind() For Each DRNodes In myDataSet.Tables("Nodes").Rows
    If DRNodes("Nod_Id_2") = 0 Then
    Nodes_1 = New TreeNode()
    Nodes_1.Text = DRNodes("Nod_Tit")
    TreeView11.Nodes.Add(Nodes_1)
    Else
    If DRNodes("Nod_Id_3") = 0 Then
    Nodes_2 = New TreeNode()
    Nodes_2.Target = "main"
    Nodes_2.Navigateurl = DRNodes("Nod_Url")
    Nodes_2.Text = DRNodes("Nod_Tit")
    Nodes_1.Nodes.Add(Nodes_2)
    Else
    Nodes_3 = New TreeNode()
    Nodes_3.Target = "main"
    Nodes_3.Navigateurl = DRNodes("Nod_Url")
    Nodes_3.Text = DRNodes("Nod_Tit")
    Nodes_2.Nodes.Add(Nodes_3)
    End If
    End If
    Next

    myDataSet.Dispose()
    myConn.Close()
    myConn.Dispose()
    End Sub
    </script>
    <meta http-equiv="Content-Language" content="zh-cn">
    <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta name="Microsoft Border" content="none"><base target="main"></HEAD>
    <body bgproperties="fixed" topmargin="0"><center>
    <form runat="server">
        <asp:DataGrid id="MyDataGrid" runat="server" ></asp:DataGrid>
    <asp:Table id="Table1" runat="server" Height="100%" Width="100%">
    <asp:TableRow height="20px">
    <asp:TableCell style="background-color: #1D3752">
    <font face="宋体-18030" size="2" color="#DCEEFF" >请选择查询项目</font><font size="2">
        </font>
    </asp:TableCell>
    </asp:TableRow>
    <asp:TableRow height="100%">
    <asp:TableCell>
         <iewc:TreeView id="TreeView11" runat="server" 
         Height="100%" width="100%" BackColor="#F0F8FF" Expanded="true">
    </iewc:TreeView>
    </asp:TableCell>
    </asp:TableRow>
    </asp:Table>
    </form>
    </center></body>
    </HTML>
      

  4.   

    你可以设置NavigateUrl时传递一个参数para到右边的框架页,比如DataSource,右边框架根据para值对DataGrid进行数据绑定//设置NavigateUrl和Target
    TreeNode node=TreeView1.GetNodeFromIndex("0");
    node.Target="RightFrameName";
    node.NavigateUrl="DataGridPage.aspx?para=aaa";RightFrame:
    str=Request.QueryString["para"];
    BindDataGrid(str); //根据参数绑定DataGrid设置了TreeNode的NavigateUrl和Target,点击时回自动更新右边框架
      

  5.   

    这个是左边框架里treeview的代码
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using Microsoft.Web.UI.WebControls;namespace hardware.et
    {
    /// <summary>
    /// contents 的摘要说明。
    /// </summary>
    public class contents : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label Label1;
    protected Microsoft.Web.UI.WebControls.TreeView TreeView2;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    string  strTreeName  =  "TreeView2";  
    string  strRef  =  Page.GetPostBackEventReference(TreeView2);  
    string  strScript  =  "<script  language=\"JavaScript\">  \n"  +  "<!--  \n"  +  " function  initTree()  {  \n"  +"                        "  +  strTreeName  +  ".onSelectedIndexChange  =  function()  {  \n"  +    "if  (event.oldTreeNodeIndex  != event.newTreeNodeIndex)  \n"  +  "this.queueEvent('onselectedindexchange',  event.oldTreeNodeIndex  +  ','  +  event.newTreeNodeIndex);  \n"  +    "window.setTimeout('"  +  strRef.Replace("'","\\'")    +  "',  0,  'JavaScript');  \n"  +    "                        }  \n"  +      "            }  \n"  +    "//  -->  \n"  +  "</script>";  
    Page.RegisterClientScriptBlock("InitTree",strScript); 
    if (!Page.IsPostBack)
    {
    TreeView2.Attributes.Add("onclick","return false;");
    TreeView2.Attributes.Add("ondblclick","TreeView2.getTreeNode(TreeView2.clickedNodeIndex).setAttribute('Expanded','True');");
    } }

    private void TreeView2_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
    {
    foreach(TreeNode node in TreeView2.Nodes)
    node.Expanded=false;
    TreeView2.GetNodeFromIndex(e.Node).Expanded=true;
    }
    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.TreeView2.Load += new System.EventHandler(this.Page_Load);
    this.TreeView2.Expand += new Microsoft.Web.UI.WebControls.ClickEventHandler(this.TreeView2_Expand);
    this.TreeView2.SelectedIndexChange += new Microsoft.Web.UI.WebControls.SelectEventHandler(this.TreeView2_SelectedIndexChange);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void TreeView2_SelectedIndexChange(object sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
    {
    this.Session["nodetext"]=null;
    this.Session["sqlStr"]=null;
    TreeNode node=TreeView2.GetNodeFromIndex(e.NewNode);
    this.Session["nodetext"]=node.Text;
    string fathernodetext=null;
    TreeNode parent_node;
    if(node.Parent is TreeNode)
    {
    parent_node=(TreeNode)node.Parent;
    fathernodetext=parent_node.Text;
    }
    switch(fathernodetext)
    {
    case "台式机":
    this.Session["sqlStr"]="DATABASE=taishiji;SERVER=localhost;UID=sa;PWD=800326";
    break;
    case "硬盘":
    this.Session["sqlStr"]="DATABASE=yingpan;SERVER=localhost;UID=sa;PWD=800326";
    break;
    }
    Label1.Text=node.Text;
    }
    }
    }
      

  6.   

    这个是右边框架里datagrid的代码!
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;namespace hardware.et
    {
    /// <summary>
    /// main 的摘要说明。
    /// </summary>
    public class main : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.DataGrid grid;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(this.Session["nodetext"]!=null && this.Session["sqlStr"]!=null)
    {
    createdatasource(1);
    }
    }
    //绑定datagrid的函数
    protected void createdatasource(int current_page)
    {
    string str_table_name,str_column_list,str_order_column,str_condition;
    //查询的表名
    //str_table_name="employees";
    str_table_name=this.Session["nodetext"].ToString();
    //this.Session["nodetext"]=null;
    //返回的列名列表
    //str_column_list="employeeid,firstname,lastname,title";
    str_column_list=" ID,型号,配置,报价";
    //排序列的列名
    str_order_column="ID";
    //查询的表件
    //str_condition="employeeid>0";
    str_condition="ID>0";
    string strConn =this.Session["sqlStr"].ToString();
    //this.Session["sqlStr"]=null;
    SqlConnection conn = new SqlConnection(strConn);
    //声明执行存储过程的SqlCommand 
    SqlCommand scd_sel=new SqlCommand("up_custompage",conn);
    scd_sel.CommandType=CommandType.StoredProcedure;
    //给存储过程的参数赋值
    SqlParameter sp_temp;
    sp_temp=scd_sel.Parameters.Add("@vc_order_column_name",SqlDbType.VarChar,100);
    sp_temp.Direction=ParameterDirection.Input;
    sp_temp.Value=str_order_column;
    sp_temp=scd_sel.Parameters.Add("@vc_select_column_list",SqlDbType.VarChar,100);
    sp_temp.Direction=ParameterDirection.Input;
    sp_temp.Value=str_column_list;
    sp_temp=scd_sel.Parameters.Add("@vc_select_table_list",SqlDbType.VarChar,100);
    sp_temp.Direction=ParameterDirection.Input;
    sp_temp.Value=str_table_name;
    sp_temp=scd_sel.Parameters.Add("@vc_condition",SqlDbType.VarChar,100);
    sp_temp.Direction=ParameterDirection.Input;
    sp_temp.Value=str_condition;
    sp_temp=scd_sel.Parameters.Add("@page_size",SqlDbType.Int);
    sp_temp.Direction=ParameterDirection.Input;
    sp_temp.Value=grid.PageSize;
    sp_temp=scd_sel.Parameters.Add("@current_page",SqlDbType.Int);
    sp_temp.Direction=ParameterDirection.Input;
    sp_temp.Value=current_page;
    sp_temp=scd_sel.Parameters.Add("@total1",SqlDbType.Int);
    sp_temp.Direction=ParameterDirection.Output;

    //执行存储过程
    SqlDataAdapter sda=new SqlDataAdapter();
    sda.SelectCommand=scd_sel;
    if (conn.State==ConnectionState.Closed)
    conn.Open();
    DataSet ds=new DataSet();
    sda.Fill(ds,"tb1");
    conn.Close();
    //设置VirtualItemCount属性
    grid.VirtualItemCount=(int)scd_sel.Parameters["@total1"].Value;
    //绑定数据源
    grid.DataSource=ds.Tables["tb1"].DefaultView;
    grid.DataBind();
    }
    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.grid.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.grid_ItemCreated);
    this.grid.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.PageIndexChanged);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    //datagrid的ItemCreated事件,用于定制分页导航行
    private void grid_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {

    ListItemType elemType = e.Item.ItemType;
    //定制分页导航行,样式为[1] [2] 第 3 页 [4]
    if (elemType == ListItemType.Pager) 
    {

    TableCell pager = (TableCell) e.Item.Controls[0];

    for (int i=0; i<pager.Controls.Count; i+=2) 
    {
    Object o = pager.Controls[i];
    if (o is LinkButton) 
    {
    LinkButton h = (LinkButton) o;
    h.Text = "[ " + h.Text + " ]"; 
    }
    else
    {
    Label l = (Label) o;
    l.Text = "第" + l.Text + "页"; 
    }
    }
    }
    }
    //页选中(分页)事件
    public void PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    grid.CurrentPageIndex = e.NewPageIndex;
    //页码值是从零开始的,所以要加一
    createdatasource(grid.CurrentPageIndex+1);
    }
    }
    }
      

  7.   

    to 江雨.net
    你说的那个参数的是什类型的?数据绑定怎么调用那个参数的?
      

  8.   

    rootnode.NavigateUrl = "main.aspx?childnodename=" + Server.UrlEncode(rootnode.Text) + "&childnodeid=" + rootnode.NodeData + ""
                rootnode.Target = "main"
      

  9.   

    不是很懂你给的代码!如果我想要传送的是我选中的节点的text值和它的父节点的text值,这样怎样写代码的呢?
      

  10.   

    把节点Text和父节点Text一并传过去
    node=TreeView1.GetNodeFromIndex("0.0");
    node.Target="RightFrameName";
    ParentNodeText="";
    if(node.Parent is TreeNode)
    ParentNodeText=((TreeNode)node.Parent).Text;
    node.NavigateUrl="DataGridPage.aspx?text=" + node.Text + "&ptext=" + ParentNodeText;右边框架页面得到所传参数
    if(Request.QueryString["text"]!=null)
    {
    string NodeText=Request.QueryString["text"].ToString();
    string ParentNodeText=Request.QueryString["ptext"].ToString();
    }
      

  11.   

    我试过了!这个数据传送和我用session的数据传送一样!还是点击节点要点击两次才能在另外一边的框架响应。我想应该不是数据的传送问题!因为我的treeview有个双击根节点就可以展开子节点的事件!我也是要点击两次根节点才能够展开!看来问题出来treeview的响应上!各位大哥帮忙看看小弟的程序!看看treeview的代码有什么问题吗?
      

  12.   

    我的页面刚刚生成的时候datagrid因为没有得到信息所以不能进行初始的数据绑定,页面一打开右框架就会显示:“ConnectionString 属性尚未初始化” 这个错误!然后我点击了两次左框架的节点的时候右边就可以显示出datagrid了!是不是说我因该在点击新的节点的之前应该先给右框架的datagrid绑定一个预置的数据呢?