2016-05-29 6 views
0

SQLサーバーにリンクされたツリービューを使用しています。私は2つのテーブルエリアと通りがあり、そこには多くの通りがあります。各エリアにそのエリアに関連する通りしか持たないツリービューを作成しています。第1区域と第2区域ノードに通りを得ることは、その通りと第1区域ノードの通りをそうしている、余分な通りを排除する必要がある。 ここに私のコードです:ツリービューの子ノードに値が重複しています。C#

private void PopulateTreeview1() 
     { 

      DataTable dt = new DataTable(); 
      DataTable dt2 = new DataTable(); 
      DataTable dt3 = new DataTable(); 

      SqlCommand cmd1 = cnn.CreateCommand(); 
      cmd1.CommandText = "select areaId,areaName from area"; 
      SqlDataAdapter sdr1 = new SqlDataAdapter(cmd1); 
      cmd1.CommandType = CommandType.Text; 
      cmd1.Connection = cnn; 
      sdr1.Fill(dt); 


      for (int i = 0; i < dt.Rows.Count; i++) 
      { 
       // Current areaId and areaname is stored 
       string areaID = dt.Rows[i]["areaId"].ToString(); 
       string areaName = dt.Rows[i]["areaName"].ToString(); 

       TreeNode AreaNode = new TreeNode(areaName); 


       SqlCommand cmd2 = cnn.CreateCommand(); 
       cmd2.CommandText = "SELECT streetId, streetName FROM street WHERE areaId = @areaId"; 
       cmd2.CommandType = CommandType.Text; 
       cmd2.Parameters.AddWithValue("@areaId", areaID); 
       SqlDataAdapter sdr2 = new SqlDataAdapter(cmd2); 
       cmd2.Connection = cnn; 
       sdr2.Fill(dt2); 

       for (int j = 0; j < dt2.Rows.Count; j++) 
       { 

        // Current StreetName and StreetId is stored 
        string streetId = dt2.Rows[j]["streetId"].ToString(); 
        string streetName = dt2.Rows[j]["streetName"].ToString(); 
        // A TreeNode is created with current StreetName 
        TreeNode StreetNode = new TreeNode(streetName); 
        // Current StreetNode is added as child node of AreaNode 
        AreaNode.Nodes.Add(StreetNode); 
        } 

       treeView1.Nodes.Add(AreaNode); 

      } 

     } 

私は助けが必要です。

+0

その作業の権利を私の解決策を見つけたAREANAME、streetName、streetIdからarea join area on area.areaId == street.areaId'次に、クエリの結果に基づいてグリッドを作成します。 – Valentin

+0

申し訳ありませんが、より多くのことを説明できますが、このクエリはCの初心者です。 –

+0

私は同じ状態の子ノードを追加する必要があるので、私の例で修正する必要があります。 –

答えて

0

私は、私が考えると、あなたはエリアIDを選択し `JOINを使用して1つのSQLクエリを作ることができ、その間に)私は(dt2.Clearを挿入し、

cmd2.Connection = cnn; 
       dt2.Clear(); 
       sdr2.Fill(dt2); 
関連する問題