Как удалить несколько строк в сетке данных и в базе данных? - PullRequest
1 голос
/ 08 апреля 2019

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

Я пытался использовать это:

var grid = StudentsDataGrid;
var mygrid = StudentsDataGrid;

        if (grid.SelectedIndex >= 0)
        {
            for (int i = grid.SelectedItems.Count -1; i >= 0; i--)
            {
                mygrid.Items.Remove(grid.SelectedItems[i]);
            };
        }

        grid = mygrid;

, но я получил сообщение о том, что операция используется неправильно при использовании ItemsSource.Вместо этого используйте доступ к элементам и изменяйте их с помощью ItemsControl.ItemsSource.

Мой метод работает только для одной строки:

private void RemoveButton_Click(object sender, EventArgs e){
         Student student = StudentsDataGrid.SelectedItem as Student;
         StudentsList.Remove(student);
}

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

OpenConection();
using (SqlDataReader dr = DataReader("SELECT IdStudent, FirstName, LastName, Address, IndexNumber, Name FROM apbd.Student INNER JOIN apbd.Studies ON Student.IdStudies = Studies.IdStudies"))
                {
                    list = new ObservableCollection<Student>();
                    while (dr.Read())
                    {
                        string idstudent = dr["IdStudent"].ToString();
                        string firstname = dr["FirstName"].ToString();
                        string lastname = dr["LastName"].ToString();
                        string address = dr["Address"].ToString();
                        string index = dr["IndexNumber"].ToString();
                        string studies = dr["Name"].ToString();

                        if (dr["IdStudent"] != DBNull.Value)
                        {
                            int? emp = (int?)dr["IdStudent"];
                        }

                    list.Add(new Student
                    {
                            IdStudent = idstudent,
                            Imie = firstname,
                            Nazwisko = lastname,
                            Adres = address,
                            Index = index,
                            Studia = studies,                       
                        });

                    }
                }
            CloseConnection();
            return list;
        }

и в основном классе я связываю ее с DataGrid через ItemsSource:

public void LoadDataToDataGrid()
        {
            StudentsList = new ObservableCollection<Student>();

            var instance = new StudentsDbService();
            StudentsList = instance.ShowData();
            StudentsDataGrid.ItemsSource = StudentsList;

        }

Хорошо, наверное, я нашел способудаления нескольких строк в сетке данных:

private void RemoveButton_Click(object sender, EventArgs e)
        {
            ObservableCollection<Student> itemsToRemove = new ObservableCollection<Student>();

            foreach (Student item in StudentsDataGrid.SelectedItems)
            {
                itemsToRemove.Add(item);
            }
            foreach (Student item in itemsToRemove)
            {
                ((ObservableCollection<Student>)StudentsDataGrid.ItemsSource).Remove(item);
            }
        }

но как теперь я могу удалить определенные записи из базы данных?Должен ли я передать IdStudent, который был передан ранее, в качестве одного из значений в Student Object?

Думаю, я нашел способ, но, пожалуйста, скажите мне, насколько он плох?

Это модифицированныйчасть, ответственная за удаление записей из DataGrid:

private void RemoveButton_Click(object sender, EventArgs e)
        {
            ObservableCollection<Student> itemsToRemove = new ObservableCollection<Student>();
            List<string> studentID = new List<string>();

            foreach (Student item in StudentsDataGrid.SelectedItems)
            {
                itemsToRemove.Add(item);
                studentID.Add(item.IdStudent);
            }
            foreach (Student item in itemsToRemove)
            {
                ((ObservableCollection<Student>)StudentsDataGrid.ItemsSource).Remove(item);
            }
            var instance = new StudentsDbService();
            instance.deleteRecords(studentID);
        }

И эта часть, когда я удаляю записи из базы данных:

public void deleteRecords(List<string> studentID)
        {
            OpenConection();
            foreach (string item in studentID)
            {
                ExecuteQueries("DELETE FROM apbd.Student WHERE IdStudent=" + item);
            }

            CloseConnection();
        }
...