C# 如何删除datagrid和数据库中的多行?

C# 如何删除datagrid和数据库中的多行?,c#,wpf,datagrid,sqlconnection,C#,Wpf,Datagrid,Sqlconnection,我想删除datagrid和数据库中的多行,但我甚至在删除datagrid中的多行时遇到问题。。。 我可以用我的代码删除一行(仅从datagrid中删除),但这还不够 我试着用这个: var grid=StudentsDataGrid; var mygrid=StudentsDataGrid; 如果(grid.SelectedIndex>=0) { 对于(int i=grid.SelectedItems.Count-1;i>=0;i--) { mygrid.Items.Remove(grid.Se

我想删除datagrid和数据库中的多行,但我甚至在删除datagrid中的多行时遇到问题。。。 我可以用我的代码删除一行(仅从datagrid中删除),但这还不够

我试着用这个:

var grid=StudentsDataGrid;
var mygrid=StudentsDataGrid;
如果(grid.SelectedIndex>=0)
{
对于(int i=grid.SelectedItems.Count-1;i>=0;i--)
{
mygrid.Items.Remove(grid.SelectedItems[i]);
};
}
grid=mygrid;
但我收到一个错误,指出在使用ItemsSource时操作不正确。而是使用对元素的访问并通过ItemsControl.ItemsSource更改它们

我的方法仅适用于一行:

private void remove按钮\单击(对象发送者,事件参数e){
Student Student=StudentsDataGrid.SelectedItem为Student;
学生列表。删除(学生);
}
也许我应该改变将数据库链接到datagrid的方式。 这是我阅读数据库的部分

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;
        }
openconconnect();
使用(SqlDataReader dr=DataReader(“从apbd中选择IdStudent、FirstName、LastName、Address、IndexNumber、Name.Student内部加入apbd.Student.IdStudies=Studies.IdStudies”))
{
列表=新的ObservableCollection();
while(dr.Read())
{
字符串idstudent=dr[“idstudent”].ToString();
字符串firstname=dr[“firstname”].ToString();
字符串lastname=dr[“lastname”].ToString();
字符串地址=dr[“address”].ToString();
字符串索引=dr[“IndexNumber”].ToString();
字符串研究=dr[“Name”].ToString();
if(dr[“IdStudent”]!=DBNull.Value)
{
int?emp=(int?)dr[“IdStudent”];
}
添加(新学生)
{
IdStudent=IdStudent,
Imie=名字,
Nazwisko=姓氏,
地址,
索引=索引,
Studia=研究,
});
}
}
CloseConnection();
退货清单;
}
在main类中,我通过ItemsSource将其链接到DataGrid:

public void LoadDataToDataGrid()
{
StudentsList=新的可观察集合();
var instance=newstudentsdbservice();
StudentsList=instance.ShowData();
StudentsDataGrid.ItemsSource=StudentsList;
}
好的,我想我找到了一种在datagrid中删除多行的方法:

private void remove按钮\单击(对象发送者,事件参数e)
{
ObservableCollection itemsToRemove=新的ObservableCollection();
foreach(StudentsDataGrid.SelectedItems中的学生项目)
{
itemsToRemove.Add(项目);
}
foreach(itemsToRemove中的学生项目)
{
((ObservableCollection)StudentsDataGrid.ItemsSource)。删除(item);
}
}
但现在如何从数据库中删除特定记录? 我应该传递以前作为Student对象中的值之一传递的IdStudent吗

我想我找到了一个方法,但请告诉我有多糟糕

这是负责从DataGrid中删除记录的修改部分:

private void remove按钮\单击(对象发送者,事件参数e)
{
ObservableCollection itemsToRemove=新的ObservableCollection();
List studentID=新列表();
foreach(StudentsDataGrid.SelectedItems中的学生项目)
{
itemsToRemove.Add(项目);
添加(item.IdStudent);
}
foreach(itemsToRemove中的学生项目)
{
((ObservableCollection)StudentsDataGrid.ItemsSource)。删除(item);
}
var instance=newstudentsdbservice();
实例.deleteRecords(studentID);
}
这就是我从数据库中删除记录的部分:

public void deleteRecords(列出studentID)
{
开放连接();
foreach(studentID中的字符串项)
{
ExecuteQueries(“从apbd.Student中删除,其中IdStudent=“+项”);
}
CloseConnection();
}

这里有很多代码和很多问题。大多数人都会继续帮助你。也许从一段代码和一个特定的问题开始。为什么要投票?!为此,请使用适当的MvvM,操作基础集合,而不是从UI获取它!您获取的选定项目可以标记为已删除(bool属性),然后您的视图可以过滤掉已删除的项目。这样,如果用户犯了错误,就可以撤消。我也会避免删除数据库中的记录,而是将它们标记为已删除(用户、日期等)。大多数人都会继续帮助你。也许从一段代码和一个特定的问题开始。为什么要投票?!为此,请使用适当的MvvM,操作基础集合,而不是从UI获取它!您获取的选定项目可以标记为已删除(bool属性),然后您的视图可以过滤掉已删除的项目。这样,如果用户犯了错误,就可以撤消。我也会避免删除数据库中的记录,而是将它们标记为已删除(用户、日期等…)。