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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не срабатывает Update в datagridview 
V
    Опции темы
akizelokro
Дата 29.1.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Можно вопрос? 

Код

           adapter.Fill(ds, "Users");
 

полностью обновляет содержимое гриды?


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
thomas
Дата 29.1.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



akizelokro, 
Приветствую.
Метод Fill для ДатаАдаптера заполняет таблицу "Users" в ДатаСете ds.
Естественно перед вызовом этого метода должно быть создано и открыто соединение с БД, задана команда на выборку данных из таблицы, создан ДатаАдаптер adapter.
И соответственно для DataGridView присвоено свойство DataSource  равное ДатаСету ds и задано свойство DataMember равное "Users"
Тогда в DataGridView отобразяться данные из таблицы "Users" ДатаСет ds.

Если надо отобразить измененные данные, то перед этим нужно обнулить свойство DataSource для DataGridView. И снова его задать. Плюс вызвать метод Refresh() для DataGridView.


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
akizelokro
Дата 30.1.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Еще пара вопросов.

Насколько я понимаю, производится при вызове метода Fill проводится полная "перечитка" таблицы Users? (что приемлемо при обновлении данных до реальных БД, но неэффективно при вставке/удалении одной или немногих записей?). Думаю, оптимальней было бы добавлять(удалять) строку в DBGrid и затем использовать InsertCommand(DeleteCommand) с последующим вызовом Update, что (как мне кажется) уменьшает работу с БД до минимума. Это так?

Также, что происходит при Fill c датагридом. У меня при его использовании обновляется датагрида и текущей строкой в датагриде становится первая. Как этого избежать при добавлении строки, чтобы текущей оставалась та строка, которую я добавил и как оно и должно быть? 

Еще мне пока непонятно, как при InsertCommand обновляется значение автоинкрементного столбца. Делается ли это автоматически при Update(), или значение будет доступно  после Fill() или я могу его как-то получить из БД другим способом?


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
RedButterfly
Дата 3.9.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Учусь
*


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

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



Цитата(informatik @ 23.1.2008,  19:33)
Просто супер!! Но много лишнего... у меня такой код состоит максимум из 3-х строк!!

что-то я немного запуталась в этом вопросе...

вот так загружаю форму

Код

 proektikDataSet = new ProektikDataSet();       
            
sqlDataAdapter = new SqlDataAdapter(sqlSelectCommand1.CommandText, sqlConnection);
          
sqlDataAdapter.Fill(proektikDataSet,"TablePro");       

dataGridView.DataSource = proektikDataSet.Tables["TablePro"].DefaultView;      



и вот такое событие при нажатии на кнопку

Код

private void PressButton_Click(object sender, System.EventArgs e)
        {
            MessageBox.Show("Работать негры!!!");
            try
            {
                string Name = textBox.Text;
               
                dataGridView.DataSource = null;
                sqlConnection.Open();
                SqlCommand insertCommand = new SqlCommand("INSERT INTO TablePro (Name) VALUES (@Name);", sqlConnection);
                
                insertCommand.Parameters.Add("@Name", Name);
                sqlDataAdapter.InsertCommand = insertCommand;
                insertCommand.ExecuteNonQuery();
                sqlDataAdapter.Update(proektikDataSet, "TablePro");
                // Принимаем изменения.
                proektikDataSet.AcceptChanges();


                sqlDataAdapter.Fill(proektikDataSet, "TablePro");

                dataGridView.DataSource = proektikDataSet.Tables["TablePro"].DefaultView;

            }
            catch (Exception ex)
            {
                // Обработка универсальных исключений…   
                throw ex;
            }
            finally
            {
                sqlConnection.Close(); // соединение будет закрыто в любом случае
            }
        }


то ли лишнего написала? запись из текстового поля в базу данных добавляется сразу же, но 

если при работающей программе залезть в сервер и удалить там строку, а потом в программе добавить новую строку, 

то в ДатаГридВью все-равно удаленную строку видно...

не пойму почему :(

ведь вот эта строка 
Код

dataGridView.DataSource = null;

должна была наверное загрузить данные ПО НОВОЙ...

Это сообщение отредактировал(а) RedButterfly - 3.9.2008, 12:51
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




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


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

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