从数据网格视图中删除

时间:2013-07-05 12:01:35

标签: winforms linq-to-sql datagrid

我创建了一个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();
        }
    }

1 个答案:

答案 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();
    }
}