我创建了一个Windows窗体应用程序。我希望这个应用程序能够使用Linq to SQL搜索记录,然后从数据网格视图中选择并删除该记录。
表单包含一个用于输入参数的文本框,一个搜索按钮,一个删除按钮和一个数据网格。
我的搜索部分正常工作,数据网格已填充,但不知道如何实现点击数据网格中的记录并删除它。
更新 - 我已经解决了这个问题。仅对btn_Delete_Click事件处理程序进行了更改,因此我在主代码之后包含了其按钮的更新代码。
namespace DeleteForm
{
public partial class Form1 : Form
{
LinqtoStudentDataContext linqStud = new LinqtoStudentDataContext();
public Form1()
{
InitializeComponent();
}
private void btnDelete_Click(object sender, EventArgs e)
{
}
private void btnSearch_Click(object sender, EventArgs e)
{
var lastName = from stud in linqStud.Students
where txtFind.Text == stud.LastName
select stud;
dataGridView1.DataSource = lastName;
}
}
}
更新代码 -
private void btnDelete_Click(object sender, EventArgs e)
{
if (this.dataGridView1.SelectedRows.Count > 0)
{
dataGridView1.Rows.RemoveAt(this.dataGridView1.SelectedRows[0].Index);
//linqStud.Students.DeleteAllOnSubmit();
linqStud.SubmitChanges();
}
}
答案 0 :(得分:1)
首先,将DataGridView的选择模式设置为FullRowSelect
。接下来,在分配DataSource时,您应该调用ToList()
- 您不能将查询用作数据源:
private void btnSearch_Click(object sender, EventArgs e)
{
var lastName = txtFind.Text;
var students = from stud in linqStud.Students
where stud.LastName == lastName
select stud;
dataGridView1.DataSource = students.ToList();
}
获取选定的行,并从上下文中删除数据绑定项(学生):
private void btnDelete_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
var student = row.DataBoundItem as Student;
linqStud.Students.Remove(student);
linqStud.SaveChanges();
}
}