Tengo un DataGridView y un Button. Si se seleccionan filas quiero eliminar haciendo clic en el botón. He intentado un par de comandos como RemoveAt, SelectedRows etc., pero nada funcionó. Cómo puedo solucionar eso?

He intentado algo como:

 if (dataGridView2.SelectedRows.Count > 0)
        {

                DataGridViewSelectedRowCollection rows =   dataGridView2.SelectedRows;
                dataGridView2.Rows.RemoveAt(rows);

        } 

pero la RemoveAt método no sólo acepta números enteros. Antes he probado con las Celdas Seleccionadas, pero luego se delets todas las filas, porque siempre hay una celda seleccionada.

  • Sí – que es a lo que me refiero. Lo siento por eso
  • Por favor, mostrar lo que han intentado incluso si no trabajan. A continuación, conocemos el problema y puede ayudar a solucionarlo.
  • Tenga en cuenta que si la han poblado la red con un origen de datos, es posible que desee actualizar esa fuente de cuadrícula y se actualizará automáticamente
  • Estos enlaces podrían ser de ayuda. [1]: stackoverflow.com/questions/17976348/…, [2]: stackoverflow.com/questions/21038006/…
InformationsquelleAutor MKX2015 | 2015-02-19

5 Comentarios

  1. 11

    Si solo quieres quitar las filas seleccionadas de la DataGridView esto debe hacerlo:

    foreach (DataGridViewRow row  in yourDataGridView.SelectedRows)
    {
         yourDataGridView.Rows.RemoveAt(row.Index);
    }

    Tu código no funciona porque se ha utilizado RemoveAt(rows) pero RemoveAt acepta sólo el índice de la fila que desea eliminar. Se pasa un DataGridViewSelectedRowCollection a ella. Usted puede obtener el índice de una fila a través de DataGridViewRow.Índice como se muestra arriba.

    • Que era exactamente lo que estaba buscando! Gracias!
    • Marca como ‘Respuesta’ si te ayudó.
    • Es posible que desee agregar un comentario de por qué esto funciona sin thowing un ‘no se puede modificar la iterada de la colección’..
    • Supongo que SelectedRows crea una nueva, la recogida selectiva, que puede modificar DataGridView.Rows durante la enumeración porque no está vinculado con ella. Editar Confirmado: referencesource.microsoft.com/#System.Windows.Forms/winforms/…
    • Interesante. Gracias por la excavación de eso. ListView hace lo mismo. OTOH, me parece a mí, como si cuadro de lista hace lo mismo también, pero no vamos a enumerar la colección y modificarlo..
    • pero podrías usar el ListView.SelectedIndices-colección, ¿no?
    • Sí, esto funciona para Listbox. ListView funciona en ambos sentidos de todos modos..

  2. 0

    Por favor, Intente esto, espero que sea de ayuda

    1. Para habilitar eliminar , establecer la AutoGenerateDeleteButton true y especificar el comando eliminar en el SqlDataSource.

     DeleteCommand="DELETE From [stores] WHERE [stor_id] = @stor_id"

    2. Aquí estamos tratando de mostrar un mensaje de confirmación antes de eliminar la fila especificada. Para hacer esto tenemos que escribir un pequeño código Javascript para mostrar el mensaje de confirmación.

     function isDelete()
      {
        return confirm("Do you want to delete this row ?");
      }

    3. Tenemos que llamar a esta función de Javascript en OnClientClick caso de la eliminación LinkButton.

    <asp:LinkButton ID="DeleteBtn" runat="server" CommandName="Delete"
    OnClientClick="return isDelete();">Delete</asp:LinkButton>

    4. La siguiente ASP.NET el programa muestra cómo eliminar una fila del Gridview y muestra un mensaje de confirmación antes de eliminar la fila especificada.

    Predeterminado.aspx ///página

    ![<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title>Untitled Page</title>
    <script type="text/javascript">
    function isDelete()
    {
    return confirm("Do you want to delete this row ?");
    }
    </script>
    </head>
    <body>
    <form id="form1" runat="server">
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
    AllowSorting="True" DataSourceID="SqlDataSource1" AllowPaging="True" DataKeyNames="stor_id" >
    <Columns>
    <asp:BoundField ReadOnly="True" HeaderText="stor_id"
    DataField="stor_id" SortExpression="stor_id"></asp:BoundField>
    <asp:BoundField HeaderText="stor_name" DataField="stor_name"
    SortExpression="stor_name"></asp:BoundField>
    <asp:BoundField HeaderText="stor_address" DataField="stor_address"
    SortExpression="stor_address"></asp:BoundField>
    <asp:BoundField HeaderText="city" DataField="city"
    SortExpression="city"></asp:BoundField>
    <asp:BoundField HeaderText="state" DataField="state"
    SortExpression="state"></asp:BoundField>
    <asp:BoundField HeaderText="zip" DataField="zip"
    SortExpression="zip"></asp:BoundField>
    <asp:TemplateField>
    <ItemTemplate>
    <asp:LinkButton ID="DeleteBtn" runat="server" CommandName="Delete"
    OnClientClick="return isDelete();">Delete
    </asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>
    <div>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:SQLDbConnection %>"
    SelectCommand="select * from stores"
    DeleteCommand="DELETE From \[stores\] WHERE \[stor_id\] = @stor_id" >
    <DeleteParameters>
    <asp:Parameter Name="stor_id" Type="String" />
    </DeleteParameters>
    </asp:SqlDataSource>
    </div>
    </form>
    </body>
    </html>]

    Aquí está la foto

    Cómo eliminar una selección de filas de un DataGridView?

    • este es un winforms pregunta, no webforms
  3. 0

    si usted está utilizando una lista de modelo, el código siguiente puede ayudar a:

     foreach (DataGridViewRow row in dataGridViewX.SelectedRows)
    {
    var val = (int)row.Cells[0].Value;
    Products.Remove(Products.Find(d => d.ProductId == val));
    }
    dataGridViewX.DataSource = null;
    dataGridViewX.DataSource = Products;
  4. 0

    mediante programación puede encontrar en qué fila está tratando de seleccionar:

    dataGridViewX.Rows[0].Selected = true;

    a continuación, eliminar la fila seleccionada:

    dataGridViewX.Rows.RemoveAt(dataGridViewX.SelectedRows[0].Index);
  5. 0

    Usted está casi allí – tratar el siguiente código-fragmento de

    if (dataGridView1.SelectedRows.Count > 0) {
    DataGridViewSelectedRowCollection row = dataGridView1.SelectedRows;
    //taking the index of the selected rows and removing/
    dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
    }
    else {  //optional    
    MessageBox.Show("Please select a row");
    }

Dejar respuesta

Please enter your comment!
Please enter your name here