with example ejemplos data c# winforms datagridview tableadapter

example - fill datagridview c# with list



¿Cómo eliminar un DataGridViewRow seleccionado y actualizar una tabla de base de datos conectada? (12)

Bueno, así es como normalmente elimino las filas marcadas por el usuario desde un DataGridView , si lo está asociando con una DataTable de un Dataset (por ejemplo: DataGridView1.DataSource = Dataset1.Tables["x"] ), entonces una vez que haga cualquier actualización (eliminar, insertar, actualizar) en el Dataset , se producirá automáticamente en su 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); } }

Tengo un control DataGridView en una aplicación de Windows Forms (escrito con C #).

Lo que necesito es: cuando un usuario selecciona un DataGridViewRow, y luego hace clic en un botón ''Eliminar'', la fila debe ser eliminada y , a continuación, la base de datos debe ser actualizada usando adaptadores de tabla.

Esto es lo que tengo hasta ahora:

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

Además, esto solo elimina una fila. Me gustaría que el usuario pueda seleccionar múltiples filas.


Este código elimina elementos seleccionados de dataGridView1 :

private void btnDelete_Click(object sender, EventArgs e) { foreach (DataGridViewRow item in this.dataGridView1.SelectedRows) { dataGridView1.Rows.RemoveAt(item.Index); } }


He escrito el siguiente código, por favor, eche un vistazo:

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

usar el Index de la fila seleccionada todavía podría funcionar; ver si el código siguiente hará el truco:

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

Espero que esto ayude, saludos.


Para eliminar varias filas en la cuadrícula de datos, c #

partes de mi código:

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


aquí hay un ejemplo muy simple:

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"/>

Código detrás:

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

tendrá que usar casillas de verificación u otro mecanismo para permitir a los usuarios seleccionar varias filas y luego puede navegar por las filas con la casilla de verificación marcada y luego eliminar esas filas.


echar un vistazo de esta manera:

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


Prueba esto:

if (dgv.SelectedRows.Count>0) { dgv.Rows.RemoveAt(dgv.CurrentRow.Index); }


for (int j = dataGridView1.Rows.Count; j > 0 ; j--) { if (dataGridView1.Rows[j-1].Selected) dataGridView1.Rows.RemoveAt(j-1); }


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


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

¡Esta solución puede eliminarse de una fila (fila no seleccionada, cliqueada!) A través del parámetro "e".


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

Quita las filas cuyos índices están en las celdas seleccionadas. Por lo tanto, seleccione cualquier celda y se eliminarán sus filas correspondientes.


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