从datagridview删除行 [英] Delete row from datagridview

查看:149
本文介绍了从datagridview删除行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在删除搜索查询返回的一行数据时遇到问题。
我希望用户可以选择哪一行数据,并点击删除按钮[button1_click]将其从数据库中删除。这是一个Windows窗体应用程序。

I having problem on deleting a row of data returned by a search query. I wish the user can select whichever row of data and click on the delete button [button1_click] to delete it from DB. This is a windows form application.

希望你能告诉我。非常感谢。
以下是我的代码

Hope you can advise me. Thanks a lot. Below is my code

public partial class Search : Form
{
    public Search()
    {
        InitializeComponent();
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Project\DB_Booking.mdb;";
        DataTable ds = new DataTable();
        using (var cn = new OleDbConnection(strConn))
        {
            cn.Open();
            using (var cmd = new OleDbCommand("SELECT * FROM staff", cn))
            {
                using (OleDbDataAdapter adp = new OleDbDataAdapter(cmd))
                    adp.Fill(ds);

                comboBox1.DataSource = ds;
                comboBox1.ValueMember = "sname";
                comboBox1.SelectedIndex = 0;

            }
        }

    }



    private void btn_search_bystaffname_Click(object sender, EventArgs e)
    {
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Project\DB_Booking.mdb;";

        DataTable dt = new DataTable();

           using (var cn = new OleDbConnection(strConn))
            {
                cn.Open();
                using (var cmd = new OleDbCommand("SELECT * FROM booking WHERE sname = @sname", cn))
                {
                    //cmd.Parameters.AddWithValue("@bdate", dtp_search_date.Value.Date);
                    cmd.Parameters.AddWithValue("@sname", comboBox1.SelectedValue);

                    using (OleDbDataAdapter oda = new OleDbDataAdapter(cmd))
                        oda.Fill(dt);
                    GridView1.DataSource = dt;

                    GridView1.Columns[0].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;
                    GridView1.Columns[1].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;
                    GridView1.Columns[2].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;
                    GridView1.Columns[3].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;
                    GridView1.Columns[4].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;
                    GridView1.Columns[5].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;

                    GridView1.Columns[0].HeaderText = "Booking ID";
                    GridView1.Columns[1].HeaderText = "Client Name";
                    GridView1.Columns[2].HeaderText = "Booking Date";
                    GridView1.Columns[3].HeaderText = "Booking Time";
                    GridView1.Columns[4].HeaderText = "Client Contact";
                    GridView1.Columns[5].HeaderText = "Staff Name";

                    this.GridView1.DefaultCellStyle.Font = new Font("Times New Roman", 12);
                    this.GridView1.DefaultCellStyle.ForeColor = Color.Blue;
                    this.GridView1.DefaultCellStyle.BackColor = Color.Beige;
                    this.GridView1.DefaultCellStyle.SelectionForeColor = Color.Yellow;
                    this.GridView1.DefaultCellStyle.SelectionBackColor = Color.Black;

                    this.GridView1.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
                    this.GridView1.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
                    this.GridView1.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
                    this.GridView1.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
                    this.GridView1.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
                    this.GridView1.Columns[5].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;

                }

            }
        }

    private void btn_search_bydate_Click(object sender, EventArgs e)
    {
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Project\DB_Booking.mdb;";

        DataTable dt = new DataTable();

        using (var cn = new OleDbConnection(strConn))
        {
            cn.Open();
            using (var cmd = new OleDbCommand("SELECT * FROM booking WHERE bdate = @bdate", cn))
            {
                cmd.Parameters.AddWithValue("@bdate", dtp_search_date.Value.Date);
                cmd.Parameters.AddWithValue("@sname", comboBox1.SelectedValue);

                using (OleDbDataAdapter oda = new OleDbDataAdapter(cmd))
                    oda.Fill(dt);
                GridView1.DataSource = dt;

                GridView1.Columns[0].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;
                GridView1.Columns[1].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;
                GridView1.Columns[2].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;
                GridView1.Columns[3].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;
                GridView1.Columns[4].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;
                GridView1.Columns[5].HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter;

                GridView1.Columns[0].HeaderText = "Booking ID";
                GridView1.Columns[1].HeaderText = "Client Name";
                GridView1.Columns[2].HeaderText = "Booking Date";
                GridView1.Columns[3].HeaderText = "Booking Time";
                GridView1.Columns[4].HeaderText = "Client Contact";
                GridView1.Columns[5].HeaderText = "Staff Name";

                this.GridView1.DefaultCellStyle.Font = new Font("Times New Roman", 12);
                this.GridView1.DefaultCellStyle.ForeColor = Color.Blue;
                this.GridView1.DefaultCellStyle.BackColor = Color.Beige;
                this.GridView1.DefaultCellStyle.SelectionForeColor = Color.Yellow;
                this.GridView1.DefaultCellStyle.SelectionBackColor = Color.Black;

                this.GridView1.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
                this.GridView1.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
                this.GridView1.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
                this.GridView1.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
                this.GridView1.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
                this.GridView1.Columns[5].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;

            }

        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        GridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        DataGridViewRow row = GridView1.SelectedRows[0];
        GridView1.Rows.Remove(row);

    }

    }

}


推荐答案

我假设这是您要更改的方法

I'm assuming this is the method you want to change

private void button1_Click(object sender, EventArgs e)
{
    GridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    DataGridViewRow row = GridView1.SelectedRows[0];
    GridView1.Rows.Remove(row);

}

GridView1.Rows.Remove (行); 只会从DaDataGridViewRowCollection中删除该项目,并且不会将其从数据库中删除。

This GridView1.Rows.Remove(row); will only remove the item from the DaDataGridViewRowCollection and will not remove it from the database.

要从数据库中删除它可以执行以下操作之一

To remove it from the database you can do one of the following


  1. 从DataTable中删除它,然后使用DataAdapter并调用更新。

  1. Remove it from `DataTable' and then use a DataAdapter and call update.

通过OleDbCommand使用DELETE SQL语句从数据库中直接删除它。

Directly delete it from the database using a DELETE SQL statement through a OleDbCommand.

如果您选择一个选项,您将通过使 dt 您的表单上的一个字段。这是因为您现在只能通过((DataRow)row.DataBoundItem).Table GridView1.DataSource 在button1_Click事件中。同时使DataAdapter成为一个字段将使这更容易。

If you choose option one you'd be well served by making dt a Field on your Form. This is because you can only access it now via ((DataRow)row.DataBoundItem).Table or GridView1.DataSource in the button1_Click event. Also making the DataAdapter a field would make this easier

GridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
DataGridViewRow row = GridView1.SelectedRows[0];
DataRow dRow = (DataRow)row.DataBoundItem;
dt.Rows.Remove(dRow);
Adapter.Update(dt);

除此之外,您可以选择只做 dt.Rows.Remove (dRow); 在button1_Click并将 Adapter.Update(dt)延迟到稍后的保存按钮。

As an aside you can choose to do only the dt.Rows.Remove(dRow); in the button1_Click and defer the Adapter.Update(dt) until later in a Save button.

如果您使用选项二,则需要将其从DataTable中删除或刷新DataTable

If you go with option two you'll need to remove it from the DataTable or refresh the DataTable

GridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
DataGridViewRow row = GridView1.SelectedRows[0];

OleDbCommand cmd = new OleDbCommand(   

using (var cn = new OleDbConnection(strConn))
{
   cn.Open();
   // not 100% this delete syntax is correct for Access
   using (var cmd = new OleDbCommand("DELETE booking WHERE [Booking ID] = @BookingId", cn)) 
   {
       cmd.Parameters.AddWithValue("@BookingId", dRow["Booking Id"]);
       cmd.ExecuteNonQuery();     
   }
}

// Do this to update the in-memory representation of the Data
DataRow dRow = (DataRow)row.DataBoundItem;
dt.Rows.Remove(dRow);

// Or just refresh the datatable using code similar as your search methods 

这篇关于从datagridview删除行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆