Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление из TreeView, удаления из TreeView и БД 
V
    Опции темы
GGuz
Дата 11.9.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.4.2007

Репутация: нет
Всего: 1



Подскажите как при удалении узла из TreeView удалить его из БД. Т.е. нужно выяснить к какой записи в Бд относится выделенный узел.

БД: Tree(Id, Name, ParentId)

вот код запихивания из БД в TreeView:

       
Код

private void MainForm_Load(object sender, EventArgs e)
        {
            SqlDataAdapter DataAdapter = new SqlDataAdapter(comm, conn);
            DataSet myDataSet = new DataSet();
            DataAdapter.Fill(myDataSet, "Tree");          


            FillTreeView(tvwMain, myDataSet);

        }    

        private void FillTreeView(TreeView treeView, DataSet ds)
        {
            treeView.Nodes.Clear();            
            DataRow[] rows = ds.Tables["Tree"].Select("ParentId = 0");
            foreach (DataRow row in rows)
                {
                    TreeNode newNode = new TreeNode(row["Name"].ToString());
                    newNode.Tag = row["Id"];
                    treeView.Nodes.Add(newNode);
                    FillNode(newNode, ds);
                    
                }
          }        

         private void FillNode(TreeNode parentNode, DataSet ds)
         {                
             DataRow[] rows = ds.Tables["Tree"].Select(string.Format("ParentId = {0}", parentNode.Tag));
             foreach (DataRow row in rows)
                {
                    TreeNode newNode = new TreeNode(row["Name"].ToString());
                    newNode.Tag = row["Id"];
                    parentNode.Nodes.Add(newNode);                    
                    FillNode(newNode, ds);                    
                }
         }     


Получается что после запихивания я теряю контроль над узлами(не знаю чему они соответствуют в БД). Можно было б по "Name" выяснять(сравнивать с данными из БД), но Name могут совпадать. Если кто знает, подскажите. Заранее пасиб.
PM MAIL   Вверх
Dogo
Дата 12.9.2008, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



В методе FillNode помещайте в newNode.Tag не row["Id"], а row.
После манипуляции с узлом вызывайте соответствующий метод DataRow
PM MAIL ICQ   Вверх
GGuz
Дата 14.9.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.4.2007

Репутация: нет
Всего: 1



Хм.. А почему не оставить так? Т.е. я проверяю таг выделенного нода(т.е. ID) и проверяю(сравниваю) его в БД. Я не совсем верно задал вопрос. Вариант проверки есть(тока что описал), но мне хотелось бы узнать может он не совсем практичный, возможно имеются другие, более правильные варианты. Dogo чем этот вариант лучше моего? Сори за неправильно поставленный вопрос. smile

Это сообщение отредактировал(а) GGuz - 14.9.2008, 12:47
PM MAIL   Вверх
Dogo
Дата 14.9.2008, 13:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



Цитата(GGuz @  14.9.2008,  13:46 Найти цитируемый пост)
Dogo чем этот вариант лучше моего?

Тем что в моем случае Tag уже хранит ссылку на интересующий row, а в вашем для того чтобы осуществить действия с row необходимо его прежде по id выбрать из DataTable

Цитата(GGuz @  14.9.2008,  13:46 Найти цитируемый пост)
я проверяю таг выделенного нода(т.е. ID) и проверяю(сравниваю) его в БД

А для чего это делать? 
У вас в myDataSet есть вся необходимая информация, остается только внести в нее изменения, а после получить DataSet всех изменений и при помощи метода myDataSet.Update(DataSet с изменениями) обновить информацию в БД.

--------------------
 
PM MAIL ICQ   Вверх
GGuz
Дата 14.9.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 20.4.2007

Репутация: нет
Всего: 1



В принципе да, избавляет от некоторого лишнего кода smile  Пасиб.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0852 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.