none
DATOS REPETIDOS C# DATAGRIDVIEW RRS feed

  • Pregunta

  • HOLA NECESITO AYUDA SOBRE UN CODIGO. TENGO ESTE CODIGO EL CUAL LO EJECUTO PARA ELIMINAR DATOS REPETIDOS DE UN DATAGRIDVIEW. PERO TIENE UN PROBLEMA ME ARROJA UN DATO DE MAS

    CODIGO * int m = 0; int n = dataGridView1.Rows.Count - 1; int k; string estaFila, unaFila; while (m < n) { k = 1; estaFila = String.Empty; // Relleno la cadena con los datos de toda la fila for (int i = 0; i < dataGridView1.Columns.Count; i++) estaFila = String.Concat(estaFila,dataGridView1.Rows[m].Cells[i].Value.ToString()); while (k < n) { unaFila = String.Empty; for (int i = 0; i < dataGridView1.Columns.Count; i++) unaFila = String.Concat(unaFila,dataGridView1.Rows[k].Cells[i].Value.ToString()); if (String.Compare(estaFila, unaFila) == 0 && k != m) { dataGridView1.Rows.RemoveAt(k); n--; } k++; } m++;

    El datagrid es el siguiente:

    Y cuando ejecuto el codigo el resultado es el siguiente**

    Por ejemplo me repite los 2 ultimos datos

    


    viernes, 18 de octubre de 2019 16:50

Todas las respuestas

  • Hola J.C., no has colocado de donde porvienen los datos del DGV pero al caso te dejo dos ejemplos para que pruebes. El primero suponiendo que vengan de Base de Datos mediante DataTable y DataSource del DGV. Salimos suponiendo que "dt" es el origen de datos dataTable

     
           //Primero recorremos los Name de las columnas en caso de que tengamos que validar todos los datos, no es tu ejemplo pero te puede servir en otra ocasión
    
          List<String> Nombres = new List<string>();
           foreach (DataColumn Texto in dt.Columns)
                {
                    Nombres.Add( Texto.ColumnName.ToString());
    
                }
          //Luego Creamos un DataView para filtrar datos
    
                DataView NoRep = new DataView (dt);
          //Creamos una nueva DataTable para filtrar y le pasamos los valores de la lista de columnas
    
                DataTable Filtro = NoRep.ToTable(true, Nombres.ToArray()); // aquí en tu ejemplo, solo colocas el nombre de tu columna "No.Empleado" en vez de Nombres.ToArray()
                DGV.DataSource = Filtro;
    
    

    Ahora si el caso es que la carga se efectúa de otra manera y debes hacer manualmente la eliminación ej

       foreach (IGrouping<object, DataGridViewRow> grupo in DGV1.Rows.Cast<DataGridViewRow>().GroupBy(dr => dr.Cells["Column1"].Value).Where(g => g.Count() > 1))
                {
                    foreach (DataGridViewRow row in grupo)
                    {
                        if(!(row.Index == 0))
                        {
                            DGV1.Rows.Remove(row);
                        }
    
                    } 
                }

    En ambos ejemplo se utiliza Linq, es cuestión de probarlo. Apenas estoy moviendo en Linq así que cotrola si te sirve, pero en mis pruebas funciona muy bien

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    domingo, 20 de octubre de 2019 2:14