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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление записей DataGridView, DataGridView 
:(
    Опции темы
albert21
Дата 3.3.2006, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я разобрался!!! smile Дело в том, что когда вы создаёте OleDbDataAdapter при помощи ToolBox-а Studio генерирует код:
Код

        private System.Data.OleDb.OleDbCommand oleDbSelectCommand1;
        private System.Data.OleDb.OleDbCommand oleDbInsertCommand1;
        private System.Data.OleDb.OleDbCommand oleDbUpdateCommand1;
        private System.Data.OleDb.OleDbCommand oleDbDeleteCommand1;
        private System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;
        ...
        this.oleDbSelectCommand1 = new System.Data.OleDb.OleDbCommand();
        this.oleDbInsertCommand1 = new System.Data.OleDb.OleDbCommand();
        this.oleDbUpdateCommand1 = new System.Data.OleDb.OleDbCommand();
        this.oleDbDeleteCommand1 = new System.Data.OleDb.OleDbCommand();
        ...
        this.oleDbDataAdapter1.DeleteCommand = this.oleDbDeleteCommand1;
        this.oleDbDataAdapter1.InsertCommand = this.oleDbInsertCommand1;
        this.oleDbDataAdapter1.SelectCommand = this.oleDbSelectCommand1;
        this.oleDbDataAdapter1.UpdateCommand = this.oleDbUpdateCommand1;

Так вот, для того чтобы выше описанных проблем не возникало необходимо закоментировать всё что связано с командами Insert, Update, Delete! Тогда, при наличии OleDbCommandBuilder, команды редактирования будут генериться без проблем.

Может для кого-то это и было очевидным, но не для меня! smile
Программу я писать ещё не закончил, а следовательно может возникнуть продолжение разговора!
Всем спасибо за внимание!
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
Butch
Дата 18.1.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всемогущий All помоги чем можешь  smile 
устал биться головой ап стену  smile 
не стал открывать новую тему т.к. данная пересекается очень близко с моей проблемой.....
Попробую подробней описать мою проблему:
Есть класс для работы с БД Access и две формы.
Первая форма содержит dataGridView (Enable Adding=false, Enable Editinig=false, Enable Deleting=falase, Enable Column Reordering=false) и кнопку для редактирования БД(открывает вторую форму с несколькими textBox-ми, кнопками `Ок` и `Отмена`).
Код из класса для работы с БД:
Код

// MyTableAdapter - OleDbDataAdapter доступный на уровне приложения
// BSMyTable - BindingSource доступный на уровне приложения
// ds - дата сет доступный на уровне приложения
// cn - коннекшион доступный на уровне класса

public void SelectTable(string SQLTable)
        {
            MyTableAdapter = new OleDbDataAdapter(SQLTable, cn);
            MyTableAdapter.Fill(ds, "MyTable");
            BSMyTable.DataSource = ds.Tables["MyTable"];
        }
public void UpdateTable(Int32 id, string val1, string val3, bool val3)
        {
            string UpDateSQL = string.Format("UPDATE Table SET val1='{0}', val2='{1}', val3={3} WHERE id={4}",
                        val1, val2, val3, id);
            MyTableAdapter = new OleDbDataAdapter(UpDateSQL, cn);
            MyTableAdapter.Fill(ds, "MyTable");
            BSMyTable.DataSource = ds.Tables["MyTable"];
            /* Пробывал и MyTableAdapter.UpdateCommand и Update - результат тот же */
        }


на Load формы с dataGridView использую следующий код:
Код

// BD - класс для работы с БД

BD.SelectTable("Select * From MyTable Order By val1");
dataGridView1.DataSource = BD.BSMyTable;


код кнопки для вызова второй формы для едита:
Код

form2 form_ed = new form2((int)dataGridView1.SelectedRows[0].Cells[0].Value);
form_ed.ShowDialog();
dataGridView1.Refresh();


код кнопки 'Ок' на второй форме:
Код

BD.UpdateMyTable(id, textBox1.Text, textBox2.Text, checkBox3.Checked);
this.Close();


Ну вот вроде бы и все, а проблема следующая:
по нажатии кнопки 'Ок' - изменяется таблица в БД, dataGridView остается не изменым
но если закрыть и открыть форму увидим измененный дата грид

Пробывал
- MyTable.AcceptChanges(); // не полетело
- dataGridView.Refresh(); // не полетело
- ds.Clear();
  повторный вызов BD.SelectTable("...."); // летит, но криво, а криво не охото  smile 


PM MAIL   Вверх
albert21
Дата 18.1.2007, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



У меня вызывает сомнения вот этот код:
Цитата

            MyTableAdapter = new OleDbDataAdapter(UpDateSQL, cn);    
            MyTableAdapter.Fill(ds, "MyTable");

Хотя может это и нормально.

Эсли у тебя типизированный ДатаСет, то могу предложить вот такой вариант:
Код

        public void UpdBook(DataGridView dataGridParent, DataSetBiblion dts, object name, object izdat, int year, object udk, object bbk, int isbn, object image, /*object kategor,*/ int vsego, object annotation)
        {
            CurrencyManager cmgr = (CurrencyManager)dataGridParent.BindingContext[dataGridParent.DataSource];
            DataRow dr = ((DataRowView)cmgr.Current).Row;
            dr.BeginEdit();
            dr["Название"] = Convert.ToString(name);
            dr["Издательство"] = Convert.ToString(izdat);
            dr["Год"] = year;
            dr["УДК"] = Convert.ToString(udk);
            dr["ББК"] = Convert.ToString(bbk);
            dr["ISBN"] = isbn;
            dr["Обложка"] = Convert.ToString(image);
            //dr["Раздел"] = Convert.ToString(kategor);
            dr["Количество_всего"] = vsego;
            dr["Аннотация"] = Convert.ToString(annotation);
            dr.EndEdit();
        }

...
//затем вызываем Update для запроса в БД
bookTableAdapter.Update(dataSetBiblion.Book);



А вообще по поводу твоего кода такие соображения:
Адаптер нужен для того, чтобы работать непосредственно с БД. Для того, чтобы изменения отображались в гриде необходимо удалить запись в ДатаСете, а затем указать гриду источник dataGridBook.DataSource = dataSetBiblion.Table;
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
RWander
Дата 31.10.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

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



в продолжении темы..
как обновить DataGridView после занесения в базу данных новой строки.  smile 

Это сообщение отредактировал(а) RWander - 31.10.2007, 23:00


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
thomas
Дата 1.11.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



RWander
Если мой DGV отображает данные из таблицы ДатаСета в которую были внесены изменения, то к двум стандартным строкам кода я добавляю еще две
Код

dgvArtLijst.DataSource = null; // обнуляем то что было
dgvArtLijst.DataSource = cyber.DS; //стандартный код что бы указать источник данных 
dgvArtLijst.DataMember = "artikelen"; // стандартный код что бы указать имя таблицы
dgvArtLijst.Refresh(); // перерисовываем DGV


Если же таблица ДатаСета, которая отображается в DGV, не содержит в себе обновленные данные, то надо по-новой выполнить запрос к БД и заполнить таблицу ДС обновленными данными и после этого вывести в DGV.


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


Новичок



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

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



а еще есть какой-нибудь способ обновить dgv без изменения у него datasource?
PM MAIL ICQ GTalk Jabber MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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