Hoe een geselecteerde DataGridViewRow verwijderen en een verbonden databasetabel bijwerken?

Ik heb een datagridview-besturingselement op een Windows Forms-toepassing (geschreven met C#).

Wat ik nodig heb is: wanneer een gebruiker een DataGridViewRow selecteert en vervolgens op een knop ‘Verwijderen’ klikt, moet de rij worden verwijderd envervolgens moet de database worden bijgewerkt met behulp van tabeladapters.

Dit is wat ik tot nu toe heb:

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

Bovendien verwijdert dit slechts één rij. Ik zou graag willen dat de gebruiker meerdere rijen kan selecteren.


Antwoord 1, autoriteit 100%

Deze code verwijdert geselecteerde items van dataGridView1:

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

Antwoord 2, autoriteit 28%

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

Verwijdert rijen met indexen in geselecteerde cellen. Selecteer dus alle cellen en de bijbehorende rijen worden verwijderd.


Antwoord 3, autoriteit 12%

Ik heb de volgende code geschreven, neem een ​​kijkje:

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

het gebruik van de Indexvan de geselecteerde rij zou nog steeds kunnen werken; kijk of de onderstaande code het lukt:

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

Ik hoop dat dit helpt, groeten.


Antwoord 4, autoriteit 5%

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

Deze oplossing kan een rij verwijderen (niet geselecteerd, aangeklikte rij!) via “e” parameter.


Antwoord 5

Om meerdere rijen in datagrid te verwijderen, c#

delen van mijn code:

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

Antwoord 6

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

Antwoord 7

Nou, dit is hoe ik meestal aangevinkte rijen door de gebruiker verwijder uit een datagridview, als je het associeert met een DataTable uit een Dataset(bijv: DataGridView1.DataSource = Dataset1.Tables["x"]), en zodra u updates uitvoert (verwijderen, invoegen, bijwerken) in de Dataset, gebeurt dit automatisch in uw 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);
            }
        }

Antwoord 8

misschien kun je de tijdelijke lijst gebruiken om te verwijderen. voor negeren rij-indexwijziging

<pre>
private void btnDelete_Click(object sender, EventArgs e)
{
    List<int> wantdel = new List<int>();
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if ((bool)row.Cells["Select"].Value == true)
        wantdel.Add(row.Index);
    }
    wantdel.OrderByDescending(y => y).ToList().ForEach(x =>
    {
        dataGridView1.Rows.RemoveAt(x);
    });           
}
</pre>

Snippet uitvouwen


Antwoord 9

kijk eens op deze manier:

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

Antwoord 10

Probeer dit:

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

Antwoord 11

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

Antwoord 12

U verwijdert eerstuit de database en vervolgenswerkt u uw datagridviewbij:

//let's suppose delete(id) is a method which will delete a row from the database and
// returns true when it is done
int id = 0;
//we suppose that the first column in the datagridview is the ID of the ROW :
foreach (DataGridViewRow row in this.dataGridView1.SelectedRows)
   id = Convert.ToInt32(row.Cells[0].Value.ToString());
if(delete(id))                               
   this.dataGridView1.Rows.RemoveAt(this.dataGridView1.SelectedRows[0].Index);
//else show message error!

Antwoord 13

private void btnDelete_Click(object sender, EventArgs e)
{
    dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
                ?BindingSource.EndEdit();
                ?TableAdapter.Update(this.?DataSet.yourTableName);
}
//NOTE:
//? - is your data from database

Uitzondering niet nodig … of wijzigen met uw eigen code.

CODE:
voer hier de afbeeldingsbeschrijving in

DB:
voer hier de afbeeldingsbeschrijving in

Voorbeeld: prntscr.com/p3208c

DB-set: http://prntscr.com/p321pw


Antwoord 14

  ArrayList bkgrefs = new ArrayList();
                    foreach (GridViewRow rowd in grdOptionExtraDetails.Rows)
                    {
                        CheckBox cbf = (CheckBox)rowd.Cells[1].FindControl("chkbulk");
                            if (cbf.Checked)
                            {
                                rowd.Visible = true;
                                 bkgrefs.Add(Convert.ToString(grdOptionExtraDetails.Data.Rows[rowd.RowIndex]["OptionID"]));
                            }
                            else
                            {
                                grdOptionExtraDetails.Data.Rows.RemoveAt(rowd.DataItemIndex);
                                rowd.Visible = false;
                            }
                    }

Antwoord 15

Probeer dit:

foreach (DataGridViewRow item in this.YourGridViewName.SelectedRows)
{
    string ConnectionString = (@"Data Source=DESKTOPQJ1JHRG\SQLEXPRESS;Initial Catalog=smart_movers;Integrated Security=True");
    SqlConnection conn = new SqlConnection(ConnectionString);
    conn.Open();
    SqlCommand cmd = new SqlCommand("DELETE FROM TableName WHERE ColumnName =@Index", conn);
    cmd.Parameters.AddWithValue("@Index", item.Index);
    int i = cmd.ExecuteNonQuery();
    if (i != 0)
    {
        YourGridViewName.Rows.RemoveAt(item.Index);
        MessageBox.Show("Deleted Succefull!", "Great", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    else {
        MessageBox.Show("Deleted Failed!", "Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

Antwoord 16

Dit werkte voor mij:

private void btnRemove_Click(object sender, EventArgs e) {
    int count = dgvSchedule.SelectedRows.Count;
    while (count != 0) {
        dgvSchedule.Rows.RemoveAt(dgvSchedule.SelectedRows[0].Index);
        count--;
    }
 }

Antwoord 17

Het werkt voor mij!

private: System::Void MyButton_Delete_Click(System::Object^ sender, System::EventArgs^ e) {
    //  (Row).
    MydataGridView->Rows->RemoveAt(MydataGridView->CurrentCell->RowIndex);
}

Antwoord 18

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

Antwoord 19

hier is een heel eenvoudig voorbeeld:

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

Code erachter:

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

u zult selectievakjes of een ander mechanisme moeten gebruiken om gebruikers in staat te stellen meerdere rijen te selecteren en dan kunt u door de rijen bladeren naar de rijen met het selectievakje aangevinkt en die rijen vervolgens verwijderen.

Other episodes