Come eliminare un DataGridViewRow selezionato e aggiornare una tabella di database collegata?

Ho un controllo DataGridView su un’applicazione Windows Form (scritto con C #).

Quello che mi serve è: quando un utente seleziona un DataGridViewRow, e poi fa clic su un pulsante ‘Elimina’, la riga deve essere cancellata e successivamente, il database deve essere aggiornato usando gli adattatori da tavolo.

Questo è quello che ho finora:

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

Inoltre, questo elimina solo una riga. Mi piacerebbe che l’utente possa selezionare più righe.

Questo codice rimuove gli elementi selezionati di 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); } } 

Rimuove le righe in cui sono presenti indici nelle celle selezionate. Quindi, seleziona le celle e le loro righe corrispondenti verranno rimosse.

Ho scritto il seguente codice, per favore guarda:

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

utilizzare l’ Index della riga selezionata potrebbe funzionare; vedi se il codice sotto farà il trucco:

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

Spero che questo aiuti, saluti.

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

Questa soluzione può essere cancellare una riga (non selezionata, riga cliccata!) Tramite il parametro “e”.

Per eliminare più righe in datagrid, c #

parti del mio codice:

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

Prova questo:

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

Bene, questo è il modo in cui di solito elimino le righe controllate dall’utente da un DataGridView , se lo associ a un DataTable da un Dataset (es: DataGridView1.DataSource = Dataset1.Tables["x"] ), quindi una volta che avrai fatto eventuali aggiornamenti (cancella, inserisci, aggiorna) nel Dataset , avverrà automaticamente nel tuo 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); } } 

dai un’occhiata in questo modo:

 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 
 for (int j = dataGridView1.Rows.Count; j > 0 ; j--) { if (dataGridView1.Rows[j-1].Selected) dataGridView1.Rows.RemoveAt(j-1); } 

ecco un esempio molto semplice:

ASPX:

      <%# Container.DataItemIndex + 1 %>      

Codice dietro:

 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; } } 

dovrai utilizzare le checkbox o qualche altro meccanismo per consentire agli utenti di selezionare più righe e quindi puoi sfogliare le righe per quelle con la casella selezionata e quindi rimuovere quelle righe.