none
VB代码转换成C# RRS feed

  • 问题

  • Function AddNodes(ByRef tNode As TreeNode, ByVal PId As Integer) As String
        '******** 遞迴增加樹結構節點 ********
        Try
            '如果Session中沒有DataTable→取得DataTable
            If Session("dt") Is Nothing Then
                Call GetDataTable()
            End If
            '定義DataTable
            Dim Dt As DataTable
            '從Session中取得DataTable
            Dt = Session("Dt")
    
            '定義DataRow承接DataTable篩選的結果
            Dim rows() As DataRow
            '定義篩選的條件
            Dim filterExpr As String
            filterExpr = "ParentId = " & PId
            '資料篩選並把結果傳入Rows
            rows = Dt.Select(filterExpr)
    
            '如果篩選結果有資料
            If rows.GetUpperBound(0) >= 0 Then
    
    
                Dim row As DataRow
                Dim tmpNodeId As Long
                Dim tmpsText As String
                Dim tmpsValue As String
                Dim tmpsUrl As String
                Dim tmpsTarget As String
                Dim NewNode As TreeNode
                Dim rc As String
    
                '逐筆取出篩選後資料
                For Each row In rows
                    '放入相關變數中
                    tmpNodeId = row(0)
                    tmpsText = row(2)
                    tmpsValue = row(3)
                    tmpsUrl = row(4)
                    tmpsTarget = row(5)
    
                    '實體化新節點
                    NewNode = New TreeNode
                    '設定節點各屬性
                    NewNode.Text = tmpsText
                    NewNode.Value = tmpsValue
                    NewNode.NavigateUrl = tmpsUrl
                    NewNode.Target = tmpsTarget
                    '將節點加入Tree中
                    tNode.ChildNodes.Add(NewNode)
    
                    '呼叫遞回取得子節點
                    rc = AddNodes(NewNode, tmpNodeId)
    
                Next
            End If
            '傳回成功訊息
            AddNodes = "Success"
    
        Catch ex As Exception
            Me.lblMessage.Text = ex.Message
            AddNodes = "False"
    
        End Try
    End Function

    求将其转换成C#的代码

    源代码地址http://www.dotblogs.com.tw/topcat/archive/2008/03/05/1234.aspx

    2012年6月12日 8:33

答案

全部回复

  • Sub BuildTree()
        '********建立樹狀結構********
    
        '宣告TreeView
        Dim Tree1 As TreeView
    
        '如果Session中沒有Tree,初始化Tree
        If Session("Tree1") Is Nothing Then
            Call InitTree()
        End If
        Tree1 = Session("Tree1")
    
        '取得根目錄節點
        Dim RootNode As TreeNode
        RootNode = Tree1.Nodes(0)
        Dim rc As String
    
        '呼叫建立子節點的函數
        rc = AddNodes(RootNode, 0)
        Session("Tree1") = Tree1
    
    End Sub
    还有这个
    2012年6月12日 8:39
  • 这个是我的转换结果

    public void BuildTree()
        {
        //********建立樹狀結構********
    
        //宣告TreeView
        //Dim Tree1 As TreeView;
            TreeView Tree1=new TreeView();
    
        //如果Session中沒有Tree,初始化Tree
        if (Session["Tree1"] ==null) 
        {
            InitTree();
        }
        Tree1 =(TreeView)Session["Tree1"];
    
        //取得根目錄節點
            TreeNode RootNode =new TreeNode();
            RootNode = Tree1.Nodes[0];      
            string rc;
    
        //呼叫建立子節點的函數
        rc = AddNodes(RootNode, 0);
            
        Session["Tree1"] = Tree1;
        }

    rc = AddNodes(RootNode, 0);

    这句有错

    2012年6月12日 8:40
  • static string AddNodes(ref TreeNode tNode , out int PId ) 
       {
        //******** 遞迴增加樹結構節點 ********
        try
        {
            //如果Session中沒有DataTable→取得DataTable
            
            if (Session["dt"] == null)
        {
                GetDataTable();
        }
            
            //定義DataTable
            
    DataTable Dt =new DataTable();
            //從Session中取得DataTable
            Dt = Session["Dt"];
    
            //定義DataRow承接DataTable篩選的結果
            //Dim rows() As DataRow;
            DataRow[] rows=new DataRow();
            //定義篩選的條件
           
            string filterExpr;
            filterExpr = "ParentId = " + PId;
            //資料篩選並把結果傳入Rows
            rows = Dt.Select(filterExpr);
    
            //如果篩選結果有資料
            if (rows.GetUpperBound(0) >= 0)
            {
    
                DataRow row =new DataRow();
                long tmpNodeId;
                string tmpsText;
                string tmpsValue;
                string tmpsUrl;
                string tmpsTarget;
                TreeNode NewNode =new TreeNode();
                string rc;
               
    
                //逐筆取出篩選後資料
                
                    foreach (row in rows)
                    {
                    //放入相關變數中
                    tmpNodeId = (long)row[0];
                    tmpsText = (string)row[2];
                    tmpsValue = (string)row[3];
                    tmpsUrl = (string)row[4];
                    tmpsTarget = (string)row[5];
    
                    //實體化新節點
                    NewNode = new TreeNode();
                    //設定節點各屬性
                    NewNode.Text = tmpsText;
                    NewNode.Value = tmpsValue;
                    NewNode.NavigateUrl = tmpsUrl;
                    NewNode.Target = tmpsTarget;
                    //將節點加入Tree中
                    tNode.ChildNodes.Add(NewNode);
    
                    //呼叫遞回取得子節點
                    rc = AddNodes(NewNode, tmpNodeId);
    
                
                }
            }
            //傳回成功訊息
            AddNodes = "Success";
        }
        catch 
        {
           // Me.lblMessage.Text = ex.Message;
            AddNodes = "False";
    
            }
    }

    这个就比较多了

       if (Session["dt"] == null)
        {
                GetDataTable();
        }

    Dt = Session["Dt"];

     foreach (row in rows)
                    {
                    //放入相關變數中
                    tmpNodeId = (long)row[0];
                    tmpsText = (string)row[2];
                    tmpsValue = (string)row[3];
                    tmpsUrl = (string)row[4];
                    tmpsTarget = (string)row[5];

                    //實體化新節點
                    NewNode = new TreeNode();
                    //設定節點各屬性
                    NewNode.Text = tmpsText;
                    NewNode.Value = tmpsValue;
                    NewNode.NavigateUrl = tmpsUrl;
                    NewNode.Target = tmpsTarget;
                    //將節點加入Tree中
                    tNode.ChildNodes.Add(NewNode);

                    //呼叫遞回取得子節點
                    rc = AddNodes(NewNode, tmpNodeId);

      //傳回成功訊息
            AddNodes = "Success";
        }
        catch
        {
           // Me.lblMessage.Text = ex.Message;
            AddNodes = "False";

            }

    这些都有错。

    2012年6月12日 8:43
  • 第一批代码转换:

    public string AddNodes(ref TreeNode tNode, int PId)
    {
    	//******** 遞迴增加樹結構節點 ********
    	try {
    		//如果Session中沒有DataTable→取得DataTable
    		if (Session["dt"] == null) {
    			GetDataTable();
    		}
    		//定義DataTable
    		DataTable Dt = default(DataTable);
    		//從Session中取得DataTable
    		Dt = Session["Dt"];
    
    		//定義DataRow承接DataTable篩選的結果
    		DataRow[] rows = null;
    		//定義篩選的條件
    		string filterExpr = null;
    		filterExpr = "ParentId = " + PId;
    		//資料篩選並把結果傳入Rows
    		rows = Dt.Select(filterExpr);
    
    		//如果篩選結果有資料
    
    		if (rows.GetUpperBound(0) >= 0) {
    
    			DataRow row = default(DataRow);
    			long tmpNodeId = 0;
    			string tmpsText = null;
    			string tmpsValue = null;
    			string tmpsUrl = null;
    			string tmpsTarget = null;
    			TreeNode NewNode = default(TreeNode);
    			string rc = null;
    
    			//逐筆取出篩選後資料
    			foreach ( row in rows) {
    				//放入相關變數中
    				tmpNodeId = row[0];
    				tmpsText = row[2];
    				tmpsValue = row[3];
    				tmpsUrl = row[4];
    				tmpsTarget = row[5];
    
    				//實體化新節點
    				NewNode = new TreeNode();
    				//設定節點各屬性
    				NewNode.Text = tmpsText;
    				NewNode.Value = tmpsValue;
    				NewNode.NavigateUrl = tmpsUrl;
    				NewNode.Target = tmpsTarget;
    				//將節點加入Tree中
    				tNode.ChildNodes.Add(NewNode);
    
    				//呼叫遞回取得子節點
    				rc = AddNodes(NewNode, tmpNodeId);
    
    			}
    		}
    		//傳回成功訊息
    		return "Success";
    
    	} catch (Exception ex) {
    		this.lblMessage.Text = ex.Message;
    		return "False";
    	}
    }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月13日 2:54
    版主
  • 第二批代码转换:

    public void BuildTree()
    {
    	//********建立樹狀結構********
    
    	//宣告TreeView
    	TreeView Tree1 = default(TreeView);
    
    	//如果Session中沒有Tree,初始化Tree
    	if (Session["Tree1"] == null) {
    		InitTree();
    	}
    	Tree1 = Session["Tree1"];
    
    	//取得根目錄節點
    	TreeNode RootNode = default(TreeNode);
    	RootNode = Tree1.Nodes[0];
    	string rc = null;
    
    	//呼叫建立子節點的函數
    	rc = AddNodes(RootNode, 0);
    	Session["Tree1"] = Tree1;
    
    }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月13日 2:56
    版主
  • 第二批代码转换:

    public void BuildTree()
    {
    	//********建立樹狀結構********
    
    	//宣告TreeView
    	TreeView Tree1 = default(TreeView);
    
    	//如果Session中沒有Tree,初始化Tree
    	if (Session["Tree1"] == null) {
    		InitTree();
    	}
    	Tree1 = Session["Tree1"];
    
    	//取得根目錄節點
    	TreeNode RootNode = default(TreeNode);
    	RootNode = Tree1.Nodes[0];
    	string rc = null;
    
    	//呼叫建立子節點的函數
    	rc = AddNodes(RootNode, 0);
    	Session["Tree1"] = Tree1;
    
    }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    你好,你可能是用工具直接转换的,然后没有测试,我测试时发现你这段代码和我的错误还是一样的,

    Tree1 = Session["Tree1"];//这句话也需要转换类型。

    rc = AddNodes(RootNode, 0);
    这个地方还是有错

    2012年6月13日 3:14
  • 第一批代码转换:

    public string AddNodes(ref TreeNode tNode, int PId)
    {
    	//******** 遞迴增加樹結構節點 ********
    	try {
    		//如果Session中沒有DataTable→取得DataTable
    		if (Session["dt"] == null) {
    			GetDataTable();
    		}
    		//定義DataTable
    		DataTable Dt = default(DataTable);
    		//從Session中取得DataTable
    		Dt = Session["Dt"];
    
    		//定義DataRow承接DataTable篩選的結果
    		DataRow[] rows = null;
    		//定義篩選的條件
    		string filterExpr = null;
    		filterExpr = "ParentId = " + PId;
    		//資料篩選並把結果傳入Rows
    		rows = Dt.Select(filterExpr);
    
    		//如果篩選結果有資料
    
    		if (rows.GetUpperBound(0) >= 0) {
    
    			DataRow row = default(DataRow);
    			long tmpNodeId = 0;
    			string tmpsText = null;
    			string tmpsValue = null;
    			string tmpsUrl = null;
    			string tmpsTarget = null;
    			TreeNode NewNode = default(TreeNode);
    			string rc = null;
    
    			//逐筆取出篩選後資料
    			foreach ( row in rows) {
    				//放入相關變數中
    				tmpNodeId = row[0];
    				tmpsText = row[2];
    				tmpsValue = row[3];
    				tmpsUrl = row[4];
    				tmpsTarget = row[5];
    
    				//實體化新節點
    				NewNode = new TreeNode();
    				//設定節點各屬性
    				NewNode.Text = tmpsText;
    				NewNode.Value = tmpsValue;
    				NewNode.NavigateUrl = tmpsUrl;
    				NewNode.Target = tmpsTarget;
    				//將節點加入Tree中
    				tNode.ChildNodes.Add(NewNode);
    
    				//呼叫遞回取得子節點
    				rc = AddNodes(NewNode, tmpNodeId);
    
    			}
    		}
    		//傳回成功訊息
    		return "Success";
    
    	} catch (Exception ex) {
    		this.lblMessage.Text = ex.Message;
    		return "False";
    	}
    }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    foreach ( row in rows)
    rc = AddNodes(NewNode, tmpNodeId);

    这两句还是报错。

    2012年6月13日 3:20
  • 你好:)

    >>Tree1 = Session["Tree1"];//这句话也需要转换类型。

    请自行改为:

    Tree1 = Session["Tree1"] as TreeView;

    改为:

    rc = AddNodes(ref RootNode, 0);


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 彭123 2012年6月13日 6:14
    2012年6月13日 4:30
    版主
  • >>foreach ( row in rows)

    删除这句:DataRow row = default(DataRow);
    然后这样改:

    foreach(DataRow row in rows)
    {
      ………………
    }

    改为:

    rc = AddNodes(ref NewNode, tmpNodeId);


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 彭123 2012年6月13日 6:14
    2012年6月13日 4:31
    版主