2016-05-29 4 views
0

Я использую древовидное представление, связанное с SQL-сервером. У меня есть две столы и улица, где есть много улиц. Я населяю свое дерево, имея в каждой области только улицы, связанные с этой областью. Я получаю улицы до 1-го района, а второй районный узел имеет свои улицы и улицы 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

Как я считаю, что вы можете сделать один SQL запрос с использованием JOIN 'выберите Areaid, areaName, StreetName, streetId из area join street On area.areaId == street.areaId' И затем заполнить сетку на основе результата запроса. – Valentin

+0

извините, но могу у объяснить больше, где я должен использовать этот запрос am новичок в C# –

+0

Мне нужно исправить его с помощью моего примера, потому что мне нужно добавить еще несколько дочерних узлов с одним и тем же состоянием, пожалуйста, помогите кому-нибудь! –

ответ

0

я нашел мое решение, я вставить dt2.Clear() между ними, его работы прямо

cmd2.Connection = cnn; 
       dt2.Clear(); 
       sdr2.Fill(dt2); 
Смежные вопросы