Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Как сделать автообновление в dataset при осуществлении insert/delete/update в datagridview  [new]
xamelione25
Member

Откуда: Белгород
Сообщений: 83
Подскажите как выбранные пункты в combobox-ах в datagridview сохранить в dataset. Мне нужно чтобы при выборе/добавлении нового пункта/строки или при удалении выбранной строки происходило постоянное автообновление в dataset. Чтобы я потом из dataset смог изъять количество выбранных пунктов и их id-ишники (для сохранения в БД).

Я попытался сделать вот так но ...
Выдает ошибку: "Операции Update не удалось найти TableMapping["id_Object"] или DataTable "id_Object"."

+
        DataSet ds = new DataSet();
        public int PreviousPage { get; set; }
        MySqlDataAdapter adapter;
        readonly string connectionString = "server=localhost;user=root;database=a_stroy;password=q1w2e3r4t5y6u7i8o9p0;";
        public DataTable Execute(string script)
        {
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                DataTable table = new DataTable();
                connection.Open();
                adapter = new MySqlDataAdapter(script, connection);
                adapter.Fill(table);
                return table;
            }
        }

        private void СomboBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            dataGridView1.Rows.Clear();
            if (comboBox1.SelectedValue != null)
            {
                column1.DataSource = Execute($"SELECT id_Object, id_customer, Name_object FROM a_stroy.object where id_customer = {comboBox1.SelectedValue};");
                column1.DisplayMember = "Name_object";
                column1.ValueMember = "id_Object";
            }
        }

        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            ComboBox cbDgv = e.Control as ComboBox;
            cbDgv.SelectedValueChanged -= new EventHandler(CbDgv_SelectedValueChanged);
            cbDgv.SelectedValueChanged += new EventHandler(CbDgv_SelectedValueChanged);
        }

        private void CbDgv_SelectedValueChanged(object sender, EventArgs e)
        {
            dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
            int rows = dataGridView1.Rows.Count;
            var comboBox = (DataGridViewComboBoxEditingControl)sender;
            int rowIndex = comboBox.EditingControlRowIndex;
            var query = $"SELECT id_Object, Name_works FROM a_stroy.words_object where id_Object = {rowIndex}"; // получение данных из combobox 
            column2.DataSource = Execute(query);
            column2.DisplayMember = "Name_works";
            column2.ValueMember = "id_Object";
            Debug.WriteLine(rowIndex);
            Debug.WriteLine(rows);
            
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                DataSet sp_CreateUser = new DataSet("id_Object");
                DataTable sp_CreateUser1 = new DataTable("sp_CreateUser1");
                sp_CreateUser.Tables.Add(sp_CreateUser1); // добавляем таблицу в dataset
                DataColumn nameColumn = new DataColumn("id_Object", Type.GetType("System.String"));
                string mysql = "SELECT * FROM Users";
                connection.Open();
                adapter = new MySqlDataAdapter(mysql, connection);
                MySqlCommandBuilder commandBuilder;
                commandBuilder = new MySqlCommandBuilder(adapter);
                adapter.InsertCommand = new MySqlCommand("id_Object", connection);
                adapter.InsertCommand.CommandType = CommandType.StoredProcedure;
                MySqlParameter parameter = adapter.InsertCommand.Parameters.Add("@id_Object", MySqlDbType.VarChar, 0, "Id");
                parameter.Direction = ParameterDirection.Output;
                adapter.Update(ds, "id_Object");
            }
        Debug.WriteLine(ds, "id_Object");
        }


подскажите в чем ошибка???... помогите пожалуйста исправить)

Сообщение было отредактировано: 1 май 21, 23:16
1 май 21, 23:23    [22317331]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать автообновление в dataset при осуществлении insert/delete/update в datagridview  [new]
Где-то в степи
Member

Откуда: Под Таганрогом
Сообщений: 4370
xamelione25,
Уж извините, с датасетами не работал лет 10 и при беглом просмотре ваших бак анализов.
Сложилось впечатление что имхо не совсем верная архитектура.
вы берете датасет (слепок базы) а сомб заполняте с запроса к базе. ( тут уж крест или трусы)
на то он и датасет ( вы создали его, и работате как с базой) толстый клиент, пропала сязь, а вам все равно, инсертитет упдейтите
как по живому, появилась связь , сделаи синхронизацию.
1 май 21, 23:47    [22317337]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать автообновление в dataset при осуществлении insert/delete/update в datagridview  [new]
xamelione25
Member

Откуда: Белгород
Сообщений: 83
Где-то в степи,
я это все находил на метаните
[url=]https://metanit.com/sharp/adonet/3.5.php
[/url]
и
[url=]https://metanit.com/sharp/adonet/3.6.php[/url]
НО
там все это выполняется по нажатию на кнопки, а мне нужно, чтобы все, что связано с добавлением новой строки (выбором нового пункта) или изменением уже выбранного, происходило все на автомате - то есть чтобы мне не пришлось постоянно для обновления кнопки нажимать.

На словах уже много услышал советов, только проблема в том, что я кодить настолько хорошо не умею пока что.
Мне бы кто-то показал в коде как надо сделать.
2 май 21, 11:56    [22317421]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать автообновление в dataset при осуществлении insert/delete/update в datagridview  [new]
Где-то в степи
Member

Откуда: Под Таганрогом
Сообщений: 4370
xamelione25,
да все понятно не волнуйся , попробуй comb заполнять из датасета,( не лазить в базу) ( может полегчает)
и вообще формочка открылась, датасет залился из базы, все - это теперь твоя локальная база, мускул можещь забыть, до следующего
обновления.
Да и вообще, зачем тебя потянуло на датасеты, имхо уже не востребованы - кури ОРМы
2 май 21, 14:06    [22317456]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать автообновление в dataset при осуществлении insert/delete/update в datagridview  [new]
xamelione25
Member

Откуда: Белгород
Сообщений: 83
Где-то в степи,
я вот здесь в 3ем посте написал ... я вот так пытался - но безуспешно ... потом мне посоветовали через dataset
[url=https://www.cyberforum.ru/windows-forms/thread2818867.html][/url]

и здесь тоже самое в 5м посте
[url=https://www.sql.ru/forum/1335450/kak-opredelit-kolichestvo-vybrannyh-combobox-ov-v-datagridview][/url]
2 май 21, 14:13    [22317458]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать автообновление в dataset при осуществлении insert/delete/update в datagridview  [new]
xamelione25
Member

Откуда: Белгород
Сообщений: 83
Где-то в степи,
мне нужно то же самое что и здесь
https://metanit.com/sharp/adonet/3.5.php

только здесь происходит все по нажатию на кнопку "добавить" и "сохранить"
а мне нужно чтобы при каждом разе у меня если я выбрал в новой автогенирируемой строке datagridview пункт в combobox-е или изменил его, то у меня происходило автообнолвение

Сообщение было отредактировано: 2 май 21, 15:01
2 май 21, 15:03    [22317485]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить