Ado.NET C# Как изменить запись в DataTable?

87
14 января 2022, 03:40

Не смогла найти в интернете адекватного объяснения работы с DataTable для изменения записей. Если у кого-то есть ссылки на источники, буду очень благодарна.

Мне нужно при нажатии кнопки проверять, есть ли в DataTable запись в поле Kod_Menu с кодом, который передаётся в Button.Tag . Как это правильно реализовать?

        public void Mouse_Click_Menu(object sender, RoutedEventArgs e)
    {
        Button B = (Button)sender;
        SqlConnection conK = Util.ConnectBD.Get_KDB();
        SqlCommand Cena = new SqlCommand("Select Cena from _Menu where Kod_Menu = " + B.Tag, conK);
        SqlCommand Nazv = new SqlCommand("Select Nazv_Menu from _Menu where Kod_Menu = " + B.Tag, conK);
        float cena = Convert.ToSingle(Cena.ExecuteScalar());
        string nazv = Nazv.ExecuteScalar().ToString();
        //Проверка на наличие номенклатуры в DataTable
        DataRow[] row = Sostav.Select("*", "Kod_menu=" + B.Tag);//Попытка получить нужную строку, а после запустить цикл foreach
            if (row != null)
            {
                int i = 0;//Переменная, которая должна хранить значение количества из полученной строки
                i = Convert.ToInt32(row[0]["Kol"]);//преобразование
                MessageBox.Show(i.ToString());//попытка проверить полученное значение
                //Здесь что-то должно быть, но я уже запутался.
                Sostav.Rows.Add(new object[] { kod_z, B.Tag, nazv, i+1, cena });//вместо добавления строки должно быть обновление
            }
        else
        {
            Sostav.Rows.Add(new object[] { kod_z, B.Tag, nazv, 1, cena });
        }
        List_Zalkaz();
    }

Были идеи брать значение количества из найденной записи, удалять эту запись, а после добавлять с новым значением. Помогите пожалуйста, хотя бы каким-нибудь источником, где можно найти информацию об этом. Очень долго смотрю и ищу, ничего не работает.

Answer 1

Решение оказалось очень простым. Я не знаю, как он там сам устанавливает нужную строку в цикле Foreach, главное, что работает. Вот код:

    public void Mouse_Click_Menu(object sender, RoutedEventArgs e)
    {
        Button B = (Button)sender;
        SqlConnection conK = Util.ConnectBD.Get_KDB();
        SqlCommand Cena = new SqlCommand("Select Cena from _Menu where Kod_Menu = " + B.Tag, conK);
        SqlCommand Nazv = new SqlCommand("Select Nazv_Menu from _Menu where Kod_Menu = " + B.Tag, conK);
        float cena = Convert.ToSingle(Cena.ExecuteScalar());
        string nazv = Nazv.ExecuteScalar().ToString();
        //Проверка на наличие номенклатуры в DataTable
        DataRow[] row = Sostav.Select("Kod_menu=" + B.Tag);//Попытка получить нужную строку, а после запустить цикл foreach
        if (row.Count() == 0)//Проверка полученных строк из выборки row. В данном случае, если запрос не вернул строк, то добавляем в таблицу запись
        {
            Sostav.Rows.Add(new object[] { kod_z, B.Tag, nazv, 1, cena });
        }
        else
        {
            foreach (var r in row)// я так понимаю, что мы присваиваем элементу r
            {
                int i = Convert.ToInt32(r["Kol"]);
                int c = Convert.ToInt32(r["Cena"]);
                r["Kol"] = i + 1;
                r["Cena"] = c + c/i;
            }
        }
        List_Zalkaz();
    }
READ ALSO
Ошибка: Fatal error: Uncaught Error: Call to a member function bindValue() on bool in…

Ошибка: Fatal error: Uncaught Error: Call to a member function bindValue() on bool in…

Выдаёт ошибку Fatal error: Uncaught Error: Call to a member function bindValue() on bool in… Не пойму, в чём может быть проблемаВывод var_dump($req); — bool(false)

266
Как определить, что файл в пути не имеет папок?

Как определить, что файл в пути не имеет папок?

Например, есть строка с названием файла без путиКак оределить, что нет пути? Делаю так, не работает:

107
Как избавится от дублирования записей в таблице БД при UPDATE?

Как избавится от дублирования записей в таблице БД при UPDATE?

На странице есть несколько полей формы с одинаковым именем name='protectMean[]'UPDATE срабатывает только если в самом последнем поле формы я меняю значение

80
Не записываются данные из формы в таблицу БД

Не записываются данные из формы в таблицу БД

Ошибок не выводит, но данные не пишет из формы таблицу БД

103