Member 12876243 Ответов: 1

В WPF DataGrid элемент управления свойство selecteditems, когда кнопку нажали обновления всех выбранных строк столбца userallocated с значение из комбобокса


Я работаю над небольшим проектом для себя, чтобы попытаться научиться программированию, но у меня возникли некоторые проблемы с некоторыми вещами.

У меня есть DataGrid, который заполняется данными с моего SQL-сервера, и то, что я пытаюсь сделать, - это если выбрана строка и выбрано значение combobox, а затем нажата кнопка Применить, то она должна обновить столбец UserAllocated.

Я могу обновлять одну строку за раз, но не все сразу.

Я попытался установить SelectionMode в "Расширенный" а также SelectionUnit to "Фуллроу" Я попытался найти похожую ситуацию, но безуспешно.

Что я уже пробовал:

Вот что у меня есть до сих пор, чтобы обновить одну строку, если она выбрана. (Я не беспокоюсь о безопасности на данный момент, так как это личный проект и буду использовать его только я.)

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

private void btnUpdate_Click(object sender, RoutedEventArgs e)
        {
    
                IList items = jobstbl.SelectedItems;
                foreach (object item in items)
                {
                    conn.Open();
                    cmd = new SqlCommand("UPDATE tblJobs SET UserAllocated='" + UserAllocated.Text + "' WHERE ID='" + JobID + "'", conn);

                    cmd.ExecuteNonQuery();
                    MessageBox.Show("User Assigned!");
                    conn.Close();

                    
                

                displayData();
                logAllocatedUser();
                Clear();

            }
        }

Richard Deeming

cmd = new SqlCommand("UPDATE tblJobs SET UserAllocated='" + UserAllocated.Text + "' WHERE ID='" + JobID + "'", conn);

Не делай этого так!

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

using (var cmd = new SqlCommand("UPDATE tblJobs SET UserAllocated = @UserAllocated WHERE ID = @JobID", conn))
{
    cmd.Parameters.AddWithValue("@UserAllocated", UserAllocated.Text);
    cmd.Parameters.AddWithValue("@JobID", JobID);
    cmd.ExecuteNonQuery();
}

Member 12876243

Привет, я знаю о SQL-инъекции. Спасибо

1 Ответов

Рейтинг:
5

Member 12876243

Решается с помощью

using (SqlConnection conn = new SqlConnection(connectionString))
                {

                    foreach (System.Data.DataRowView dr in jobstbl.SelectedItems)
                    {

                        conn.Open();
                        string query_search = "UPDATE tblJobs SET UserAllocated = @UserAllocated WHERE ID = @JobID";
                            
                        SqlCommand cmd = new SqlCommand(query_search, conn);

                        cmd.Parameters.AddWithValue("@UserAllocated", UserAllocated.Text);
                        cmd.Parameters.AddWithValue("@JobID", dr[0].ToString());

                        cmd.ExecuteNonQuery();
                        conn.Close();

                    }
                }