如何删除选定的DataGridViewRow并更新连接的数据库表?

我有一个Windows窗体应用程序(用C#编写)的DataGridView控件。

我需要的是:当用户select一个DataGridViewRow,然后点击一个“删除”button,该行应该被删除接下来,数据库需要更新使用表适配器。

这是我迄今为止:

 private void btnDelete_Click(object sender, EventArgs e) { if (this.dataGridView1.SelectedRows.Count > 0) { dataGridView1.Rows.RemoveAt(this.dataGridView1.SelectedRows[0].Index); } } 

而且,这只会删除一行。 我想在哪里用户可以select多行。

此代码删除dataGridView1选定项目:

  private void btnDelete_Click(object sender, EventArgs e) { foreach (DataGridViewRow item in this.dataGridView1.SelectedRows) { dataGridView1.Rows.RemoveAt(item.Index); } } 
 private void buttonRemove_Click(object sender, EventArgs e) { foreach (DataGridViewCell oneCell in dataGridView1.SelectedCells) { if (oneCell.Selected) dataGridView1.Rows.RemoveAt(oneCell.RowIndex); } } 

删除索引在选定单元格中的行。 所以,select任何单元格,其相应的行将被删除。

我写了下面的代码,请看看:

 foreach (DataGridViewRow row in dataGridView1.SelectedRows) if (!row.IsNewRow) dataGridView1.Rows.Remove(row); 

使用所选行的Index仍然可以工作; 看看下面的代码是否可以做到这一点:

 int selectedCount = dataGridView1.SelectedRows.Count; while (selectedCount > 0) { if (!dataGridView1.SelectedRows[0].IsNewRow) dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index); selectedCount--; } 

我希望这有助于,问候。

 private void btnDelete_Click(object sender, EventArgs e) { if (e.ColumIndex == 10)// 10th column the button { dataGridView1.Rows.Remove(dataGridView1.Rows[e.RowIndex]); } } 

这个解决scheme可以通过“e”参数删除一行(没有被选中,点击行!)。

要删除datagrid中的多行,c#

我的部分代码:

 private void btnDelete_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in datagrid1.SelectedRows) { //get key int rowId = Convert.ToInt32(row.Cells[0].Value); //avoid updating the last empty row in datagrid if (rowId > 0) { //delete aController.Delete(rowId); //refresh datagrid datagrid1.Rows.RemoveAt(row.Index); } } } public void Delete(int rowId) { var toBeDeleted = db.table1.First(c => c.Id == rowId); db.table1.DeleteObject(toBeDeleted); db.SaveChanges(); } 

尝试这个:

 if (dgv.SelectedRows.Count>0) { dgv.Rows.RemoveAt(dgv.CurrentRow.Index); } 
 private: System::Void button9_Click(System::Object^ sender, System::EventArgs^ e) { String^ constring = L"datasource=localhost;port=3306;username=root;password=password"; MySqlConnection^ conDataBase = gcnew MySqlConnection(constring); conDataBase->Open(); try { if (MessageBox::Show("Sure you wanna delete?", "Warning", MessageBoxButtons::YesNo) == System::Windows::Forms::DialogResult::Yes) { for each(DataGridViewCell^ oneCell in dataGridView1->SelectedCells) { if (oneCell->Selected) { dataGridView1->Rows->RemoveAt(oneCell->RowIndex); MySqlCommand^ cmdDataBase1 = gcnew MySqlCommand("Delete from Dinslaken_DB.Configuration where Memory='ORG 6400H'"); cmdDataBase1->ExecuteNonQuery(); //sda->Update(dbdataset); } } } } catch (Exception^ex) { MessageBox::Show(ex->ToString()); } } 

那么,这是我通常如何从DataGridView删除用户检查的行,如果您将它与数据DataGridView1.DataSource = Dataset1.Tables["x"]的DataTable关联(例如: DataGridView1.DataSource = Dataset1.Tables["x"] ),那么一旦您将Dataset集中的任何更新(删除,插入,更新),都会自动发生在您的DataGridView

 if (MessageBox.Show("Are you sure you want to delete this record(s)", "confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Yes) { try { for (int i = dgv_Championnat.RowCount -1; i > -1; i--) { if (Convert.ToBoolean(dgv_Championnat.Rows[i].Cells[0].Value) == true) { Program.set.Tables["Champ"].Rows[i].Delete(); } } Program.command = new SqlCommandBuilder(Program.AdapterChampionnat); if (Program.AdapterChampionnat.Update(Program.TableChampionnat) > 0) { MessageBox.Show("Well Deleted"); } } catch (SqlException ex) { MessageBox.Show(ex.Message); } } 

看看这样:

 if (MessageBox.Show("Sure you wanna delete?", "Warning", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes) { foreach (DataGridViewRow item in this.dataGridView1.SelectedRows) { bindingSource1.RemoveAt(item.Index); } adapter.Update(ds); } 
 if(this.dgvpurchase.Rows.Count>1) { if(this.dgvpurchase.CurrentRow.Index<this.dgvpurchase.Rows.Count) { this.txtname.Text = this.dgvpurchase.CurrentRow.Cells[1].Value.ToString(); this.txttype.Text = this.dgvpurchase.CurrentRow.Cells[2].Value.ToString(); this.cbxcode.Text = this.dgvpurchase.CurrentRow.Cells[3].Value.ToString(); this.cbxcompany.Text = this.dgvpurchase.CurrentRow.Cells[4].Value.ToString(); this.dtppurchase.Value = Convert.ToDateTime(this.dgvpurchase.CurrentRow.Cells[5].Value); this.txtprice.Text = this.dgvpurchase.CurrentRow.Cells[6].Value.ToString(); this.txtqty.Text = this.dgvpurchase.CurrentRow.Cells[7].Value.ToString(); this.txttotal.Text = this.dgvpurchase.CurrentRow.Cells[8].Value.ToString(); this.dgvpurchase.Rows.RemoveAt(this.dgvpurchase.CurrentRow.Index); refreshid(); } } 
 for (int j = dataGridView1.Rows.Count; j > 0 ; j--) { if (dataGridView1.Rows[j-1].Selected) dataGridView1.Rows.RemoveAt(j-1); } 

这里是一个非常简单的例子:

ASPX:

 <asp:GridView ID="gvTest" runat="server" SelectedRowStyle-BackColor="#996633" SelectedRowStyle-ForeColor="Fuchsia"> <Columns> <asp:CommandField ShowSelectButton="True" /> <asp:TemplateField> <ItemTemplate> <%# Container.DataItemIndex + 1 %> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:Button ID="btnUpdate" runat="server" Text="Update" OnClick="btnUpdateClick"/> 

代码背后:

 public partial class _Default : System.Web.UI.Page { private readonly DataTable _dataTable; public _Default() { _dataTable = new DataTable(); _dataTable.Columns.Add("Serial", typeof (int)); _dataTable.Columns.Add("Data", typeof (string)); for (var i = 0; ++i <= 15;) _dataTable.Rows.Add(new object[] {i, "This is row " + i}); } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) BindData(); } private void BindData() { gvTest.DataSource = _dataTable; gvTest.DataBind(); } protected void btnUpdateClick(object sender, EventArgs e) { if (gvTest.SelectedIndex < 0) return; var r = gvTest.SelectedRow; var i = r.DataItemIndex; //you can get primary key or anyother column vlaue by //accessing r.Cells collection, but for this simple case //we will use index of selected row in database. _dataTable.Rows.RemoveAt(i); //rebind with data BindData(); //clear selection from grid gvTest.SelectedIndex = -1; } } 

您将不得不使用checkbox或其他一些机制来允许用户select多行,然后可以通过选中checkbox来浏览行,然后删除这些行。