Я хотел бы удалить несколько строк в моей таблице данных, а также в базе данных, но у меня даже возникают проблемы с удалением нескольких строк даже в сетке данных ... Я могу удалить одну строку с моим кодом (только из сетки данных), но это не такДостаточно.
Я пытался использовать это:
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();
}