2016-01-03 1 views
0

Так что я делаю программу с несколькими категориями с несколькими нотами, хранящимися в ней. Я студент, и мы получили задание работать с localdb SQL-сервера, чтобы сохранить наши категории и заметки. Программа показывает категории и заметки с помощью элемента управления древовидной структурой.Я хочу добавить объект в свой список, но способ, которым организованы вложенные циклы, делает это невозможным (C#)

Теперь я пытаюсь создать поисковую панель для своих заметок. Он должен фильтровать заголовок заметки.

Мой вопрос в том, как я могу получить все заметки из категории и добавить их в ту же категорию? Теперь все заметки отображаются в разных категориях, но с тем же именем. Это связано с тем, что мой основной цикл обрабатывает ноты и процессы внутри цикла.

Когда я помещаю «categoriesUI1.Categories.Add (category);» за контуром while я вижу только 1 категорию с 1 заметкой, потому что сначала обрабатывается цикл нот.

Вот некоторые дополнительные скриншоты, чтобы дать вам лучшее представление о том, как работает моя программа:

Перед фильтрацией: https://gyazo.com/cea5c4d9ff18fb93c9f47cf336942bc9

После фильтрации на 'test2': https://gyazo.com/282240e5f1a754389688c68257893d92

connection = new SqlConnection(@"Data Source=(localdb)\mssqllocaldb;Initial Catalog=dbNotes;Integrated Security=True;MultipleActiveResultSets=true"); 
     categoriesUI1.tvwCategories.SelectedNode = categoriesUI1.tvwCategories.TopNode; 
     int count = categoriesUI1.Categories.Count; 

     if (count > 0) 
     { 
      for (int i = count; i > 0; i = count) 
      { 
       categoriesUI1.Categories.RemoveAt(0); 
       count = categoriesUI1.Categories.Count; 
      } 
     } 

     connection.Open(); 
     SqlCommand commandNote = new SqlCommand("SELECT ID, Cat_ID, Titel, Text, Created FROM tblNote WHERE Titel LIKE '%" + searchBarUI1.getTextValue() + "%'", connection); 
     SqlDataReader readerNote = commandNote.ExecuteReader(); 
     if (readerNote.HasRows) 
     { 
      Category category = new Category(); 
      while (readerNote.Read()) 
      { 
       int id = readerNote.GetInt32(0); 
       int Cat_id = readerNote.GetInt32(1); 
       string title = readerNote.GetString(2); 
       string text = readerNote.GetString(3); 
       DateTime created = readerNote.GetDateTime(4); 
       string Cat_title = ""; 

       SqlCommand commandCategory = new SqlCommand("SELECT Titel FROM tblCategory WHERE ID = " + Cat_id, connection); 
       SqlDataReader readerCategory = commandCategory.ExecuteReader(); 
       if (readerCategory.HasRows) 
       { 
        while (readerCategory.Read()) 
        { 
         Cat_title = readerCategory.GetString(0); 
         category = new Category(Cat_id, Cat_title); 
        } 
       } 
       Note note; 
       note = new Note(id, title, text, created); 
       category.Notes.Add(note); 
       readerCategory.Close(); 
       categoriesUI1.Categories.Add(category); 
      } 

     } 
     readerNote.Close(); 
     connection.Close(); 

ответ

0

я дал вам мои idae

1.получите все Кейтс по Searchkey. 2.get Добавить все заметки, внесенные в список поискаKey и Cat_id, добавить их в соответствие Cate

подробнее, только некоторые идеи, еще не проверенные. Надеюсь, это поможет.

/// <summary> 
    /// initail your UI 
    /// </summary> 
    void ini() 
    { 


     connection = new SqlConnection(@"Data Source=(localdb)\mssqllocaldb;Initial Catalog=dbNotes;Integrated Security=True;MultipleActiveResultSets=true"); 
     categoriesUI1.tvwCategories.SelectedNode = categoriesUI1.tvwCategories.TopNode; 
     int count = categoriesUI1.Categories.Count; 

     if (count > 0) 
     { 
      for (int i = count; i > 0; i = count) 
      { 
       categoriesUI1.Categories.RemoveAt(0); 
       count = categoriesUI1.Categories.Count; 
      } 
     } 

    } 







    /// <summary> 
    /// this is for add all searchressult Cates to to Treeview 
    /// </summary> 
    /// <param name="sKey"></param> 
    void SearchCate(string sKey) 
    { 
      connection.Open(); 
     SqlCommand commandCategory = new SqlCommand("SELECT Titel FROM tblCategory WHERE ID in ( 
SELECT ID FROM tblNote WHERE Titel LIKE '%" + sKey + 
           "%') " + Cat_id, connection); 


     SqlDataReader readerCategory = commandCategory.ExecuteReader(); 
     if (readerCategory.HasRows) 
     { 
      while (readerCategory.Read()) 
      { 
       Cat_title = readerCategory.GetString(0); 
       category = new Category(Cat_id, Cat_title); // new category 
       categoriesUI1.Categories.Add(category); 

       // then add your note's search result here to eavcgorhe 

       AddNoteToACateBySearchKey(sKey,category); 

      } 
     } 



    } 



    /// <summary> 
    /// add all searchresult note to cate 
    /// </summary> 
    /// <param name="sKey"></param> 
    /// <param name="Parent"></param> 

    void AddNoteToACateBySearchKey(string sKey, Category Parent) 
    { 


     connection.Open(); 
     SqlCommand commandNote = new SqlCommand("SELECT ID, Cat_ID, Titel, Text, Created FROM tblNote WHERE Titel LIKE '%" + sKey + "%' and Cat_ID='" + Parent.Cat_id + "' ", connection); 
     SqlDataReader readerNote = commandNote.ExecuteReader(); 
     if (readerNote.HasRows) 
     { 
      Category category = new Category(); 
      while (readerNote.Read()) 
      { 
       int id = readerNote.GetInt32(0); 
       int Cat_id = readerNote.GetInt32(1); 
       string title = readerNote.GetString(2); 
       string text = readerNote.GetString(3); 
       DateTime created = readerNote.GetDateTime(4); 
       string Cat_title = ""; 



       Note note; 
       note = new Note(id, title, text, created); // new note 
       category.Notes.Add(note); 
       readerCategory.Close(); 




      } 



     } 

     readerNote.Close(); 
     connection.Close(); 

    } 
0

Я исправил его, добавив примечание, только если Cat_ID соответствует идентификатору текущей категории. Теперь основной цикл обрабатывает категории, а внутренняя петля обрабатывает ноты.

connection = new SqlConnection(@"Data Source=(localdb)\mssqllocaldb;Initial Catalog=dbNotes;Integrated Security=True;MultipleActiveResultSets=true"); 
     categoriesUI1.tvwCategories.SelectedNode = categoriesUI1.tvwCategories.TopNode; 
     int count = categoriesUI1.Categories.Count; 

     if (count > 0) 
     { 
      for (int i = count; i > 0; i = count) 
      { 
       categoriesUI1.Categories.RemoveAt(0); 
       count = categoriesUI1.Categories.Count; 
      } 
     } 

     connection.Open(); 
     SqlCommand commandCategory = new SqlCommand("SELECT ID, Titel from tblCategory", connection); 
     SqlDataReader readerCategory = commandCategory.ExecuteReader(); 
     if (readerCategory.HasRows) 
     { 
      while (readerCategory.Read()) 
      { 
       int id = readerCategory.GetInt32(0); 
       string titel = readerCategory.GetString(1); 
       Category category = new Category(id, titel); 

       SqlCommand commandNote = new SqlCommand("SELECT ID, Cat_ID, Titel, Text, Created FROM tblNote WHERE Titel LIKE '%" + searchBarUI1.getTextValue() + "%'", connection); 
       SqlDataReader readerNote = commandNote.ExecuteReader(); 
       if (readerNote.HasRows) 
       { 
        while (readerNote.Read()) 
        { 
         int catID = readerNote.GetInt32(1); 
         if (catID == id) 
         { 
          int noteID = readerNote.GetInt32(0); 
          string noteTitel = readerNote.GetString(2); 
          string noteText = readerNote.GetString(3); 
          DateTime noteCreated = readerNote.GetDateTime(4); 
          Note note = new Note(noteID, noteTitel, noteText, noteCreated); 
          category.Notes.Add(note); 
         } 
        } 
       } 
       if(category.Notes.Count > 0) 
        categoriesUI1.Categories.Add(category); 
      } 
     }