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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление данных в связанных DataGridView 
:(
    Опции темы
Ald
Дата 5.8.2008, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Есть 2 связанные таблицы из базы Northwind – Customers и Orders. Связь один ко многим. Данные из тех таблиц я вывожу на 2 связанных между собой DatagridView. Нужно по выбору пользователя осуществить удаление записи из главной таблицы или из подчиннеой таблицы. Пользователь выбирает данные путем клика на нужном поле и нажимает кнопку удалить. 
Код


public partial class Form1 : Form
    {
        private DataSet ds;
        private SqlDataAdapter da;
        public Form1()
        {
            InitializeComponent();
           

        }
            private void Form1_Load(object sender, EventArgs e)
        {
            string sqlConnectString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=c:\NORTHWND.mdf;" +
               "Integrated security=SSPI;";

            string sqlSelect = @"SELECT * FROM Customers; SELECT * FROM Orders";
            da = new SqlDataAdapter(sqlSelect, sqlConnectString);
            da.TableMappings.Add("Table", "Customers");
            da.TableMappings.Add("Table1", "Orders");
            ds = new DataSet();
            da.Fill(ds);
            ds.Relations.Add("FK_Customers_Orders", ds.Tables["Customers"].Columns["CustomerID"], ds.Tables["Orders"].Columns["CustomerID"]);

            BindingSource customersBindingSource = new BindingSource();
            dataGridView1.DataSource = customersBindingSource;
            BindingSource ordersBindingSource = new BindingSource();
            dataGridView2.DataSource = ordersBindingSource;

            customersBindingSource.DataSource = ds;
            customersBindingSource.DataMember = "Customers";

            ordersBindingSource.DataSource = customersBindingSource;
            ordersBindingSource.DataMember = "FK_Customers_Orders";
        }
}


Если нужно удалить запись из главной таблицы, то тут все просто я получаю значение CustomerID c помощью: dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[0].Value
Далее выполняю запрос на удаление всех записей из подчиненной таблицы и 1 запись из главной.

Но как узнать какую запись пользователь выбрал в подчиненном  гриде, если ему нужно удалить 1 запись из него и не удалять данные из главной таблицы?
PM MAIL   Вверх
MasterOfCode
Дата 6.8.2008, 05:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



Вообще то все это должно решаться в триггерной логике в самой СУБД. Пишешь триггер, цепляешь его на событие к таблице. В самой программе не чего не делаешь кроме удаления записи...


--------------------
user posted image
PM ICQ   Вверх
vretsky
Дата 6.8.2008, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



так же как и в главном гриде, д.б. поле ID в таблице "заказы", выводишь его в грид (можно невидимым), получаешь так же его значение и удаляешь. в чем проблема не очень понимаю? может в табле "заказы" нет ключа?

Добавлено через 4 минуты и 6 секунд
для MasterOfCode какой триггер? база mdb

Добавлено через 8 минут и 2 секунды
пардон прошу прощения... не проснулся исче  smile  последнее сообщение прошу считать недействительным
PM MAIL   Вверх
vretsky
Дата 6.8.2008, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

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

да точно так же через CurrentCell

повторил ваш код, 

добавил это:

MessageBox.Show(dataGridView2[0, dataGridView2.CurrentCell.RowIndex].Value.ToString());

нормально работает. если первое поле в таблице заказов ID, то:

string orderNumber=dataGridView2[0, dataGridView2.CurrentCell.RowIndex].Value.ToString();

string delCMD="DELETE FROM ORDERS WHERE ID=" + orderNumber;

(ну или там передать как параметр в строку запроса)

и удаляйте на здоровье




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


Новичок



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

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



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

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

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

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


 




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


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

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