none
Error al copiar y pegar RRS feed

  • Pregunta

  • Buenos Días

    He copiado un codigo del amigo Leandro que lo encontre en este foro

    Lo necesito para copiar y pegar filas de excel a un data gridview pero me da error no se por que

    Me podrían ayudar

     if (e.Control && e.KeyCode == Keys.V)
                {
                    try
                    {
                        foreach (string line in Clipboard.GetText.Split(Constants.vbNewLine))
                        {
                            string[] item = line.Trim.Split(Constants.vbTab);
                            if (item.Length == this.dataGridView1.ColumnCount)
                            {
                                this.dataGridView1.Rows.Add(item);
                            }
                        }
    
                    }
                    catch (Exception ex)
                    {
                      
                    }
    
                }

    saludos


    ruben

    lunes, 13 de noviembre de 2017 10:35

Respuestas

  • Buenas,

    El valor de ítem es lógico, lo que no entiendo es porque haces el Items.Lenght, ya que como has copiado 4 filas, pero solo tienes una columna, nunca va a entrar, solo entrará so copias de uno en uno, quizás haciéndolo así te vaya mejor

    string strText =  Clipboard.GetText();
    foreach (string line in strText.Split('\t'))
    {
        string[] items = line.Trim().Split(new[] { Environment.NewLine }, StringSplitOptions.None);
       foreach (string item in items)
       {
           this.dataGridView1.Rows.Add(item);
       }       
    }
    Fíjate que en vez de comparar, recorre todo el array de códigos y los mete de uno en uno. 

    Nos comentas el resultado

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta Ruben Lezcano lunes, 13 de noviembre de 2017 14:39
    lunes, 13 de noviembre de 2017 13:00

Todas las respuestas

  • hola

    has definido en el form un control datagridview ? porque te esta marcando como que no existe ese control, o no con ese nombre

    ademas recuerda que Trim es un metodo, por lo que deberia seria line.Trim()

    ese codigo lo has convertido de vb.net ? porque no existe un vbNewLine en c#

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 13 de noviembre de 2017 10:48
  • Hola Leandro

    Si lo he convertido y ese fue el resultado si el datagrid ya esta bien

    El trim esta corregido 

    saludos


    ruben

    lunes, 13 de noviembre de 2017 10:52
  • esta linea necesito remplazar

      foreach (string line in Clipboard.GetText().Split(Constants.vbNewLine))

         string[] item = line.Trim().Split(Constants.vbTab);


    ruben

    lunes, 13 de noviembre de 2017 10:54
  • bien

    el GetText es un metodo, te faltan los ()

    esos Constants que defiens no existen en c#, para hacer un split por el Tab podrias usar

    s.Split('\t');

    para el new line usar

    Environment.NewLine

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 13 de noviembre de 2017 10:56
  • Leandro 

    Donde debo agregar ese codigo

      private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
            {
    
    
                if (e.Control && e.KeyCode == Keys.V)
                {
                    try
                    {
                        foreach (string line in Clipboard.GetText().Split(Constants.vbNewLine))
                        {
                            string[] item = line.Trim().Split(Constants.vbTab);
                            if (item.Length == this.dataGridView1.ColumnCount)
                            {
                                this.dataGridView1.Rows.Add(item);
                            }
                        }
    
                    }
                    catch (Exception ex)
                    {
                      
                    }
    
                }


    ruben

    lunes, 13 de noviembre de 2017 10:59
  • el \t por por Constants.vbTab

    Environment.NewLine  por Constants.vbNewLine

    ademas quita el

    catch (Exception ex)

    nunca dejes un catch vacio, sino vas hacer nada con el exception no lo controles, salvo que necesites loguear el error a un log


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 13 de noviembre de 2017 11:03
  • La verdad que no entiendo :( soy cabezota o tonto creo que tonto jajaja


    ruben

    lunes, 13 de noviembre de 2017 11:08

  • ruben

    lunes, 13 de noviembre de 2017 11:10
  • Buenas Ruben,

    Para corregir ese error, tienes que poner la linea asi:

    foreach (string line in Clipboard.GetText().Split('\t'))
    {
        string[] item = line.Trim().Split(new[] { Environment.NewLine }, StringSplitOptions.None);
    }

    Con eso le pasas los separadores de linea que considera el equipo

    Nos comentas el resultado

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    lunes, 13 de noviembre de 2017 11:26
  • Hola Jorge

    Mira lo tengo como me lo has dicho

      private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
            {
    
    
                if (e.Control && e.KeyCode == Keys.V)
                {
    
                    foreach (string line in Clipboard.GetText().Split('\t'))
                    {
                        string[] item = line.Trim().Split(new[] { Environment.NewLine }, StringSplitOptions.None);
                    }
                    
    
                }
    
            }

    Este es el datagrid en el EAN 13 quiero pegar 6 filas

    Pero nada


    ruben

    lunes, 13 de noviembre de 2017 11:36
  • Buenas ruben,

    Falta tu parte del codigo que rellena el grid, yo lo que quitado para poder probar, pero el conjunto seria uniéndolo:

    foreach (string line in Clipboard.GetText().Split('\t'))
    {
        string[] item = line.Trim().Split(new[] { Environment.NewLine }, StringSplitOptions.None);
       if (item.Length == this.dataGridView1.ColumnCount)
       {
           this.dataGridView1.Rows.Add(item);
       }       
    }
    Prueba ahora y nos comentas


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    lunes, 13 de noviembre de 2017 11:38
  • No no hace nada

    He seleccionado 3 filas de un excel y control V en el datagrid y nada

    Saludos


    ruben

    lunes, 13 de noviembre de 2017 11:57
  • NO se ejecuta el contol V   

    Solo copia la primera Celda


    ruben

    lunes, 13 de noviembre de 2017 11:59
  • No hace la parte de agregar las linea el valor de columcoun es 1


    ruben

    lunes, 13 de noviembre de 2017 12:04
  • Buenas Ruben,

    Si metes un breakpoint, que valores tienen las variables?

    Cambia el código por este:

    string strText =  Clipboard.GetText();
    foreach (string line in strText.Split('\t'))
    {
        string[] item = line.Trim().Split(new[] { Environment.NewLine }, StringSplitOptions.None);
       if (item.Length == this.dataGridView1.ColumnCount)
       {
           this.dataGridView1.Rows.Add(item);
       }       
    }

    Y dinos el valor que tiene "strText" , ya que es de donde vienen el resto de acciones.

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    lunes, 13 de noviembre de 2017 12:06
  • Jorge estos son los valores del strtext

    E esta fila el length es 4  y el column es 1

       if (item.Length == this.dataGridView1.ColumnCount)

    Y  no entra en el if

    Saludos


    ruben

    lunes, 13 de noviembre de 2017 12:44
  • Buenas,

    El valor de ítem es lógico, lo que no entiendo es porque haces el Items.Lenght, ya que como has copiado 4 filas, pero solo tienes una columna, nunca va a entrar, solo entrará so copias de uno en uno, quizás haciéndolo así te vaya mejor

    string strText =  Clipboard.GetText();
    foreach (string line in strText.Split('\t'))
    {
        string[] items = line.Trim().Split(new[] { Environment.NewLine }, StringSplitOptions.None);
       foreach (string item in items)
       {
           this.dataGridView1.Rows.Add(item);
       }       
    }
    Fíjate que en vez de comparar, recorre todo el array de códigos y los mete de uno en uno. 

    Nos comentas el resultado

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta Ruben Lezcano lunes, 13 de noviembre de 2017 14:39
    lunes, 13 de noviembre de 2017 13:00
  • pero has invertido el codigo, porque pusiste el primer split con \t si se supone que debes cortar por new line ?

    foreach (string line in Clipboard.GetText().Split(new string[] { "\r\n" }, StringSplitOptions.None)){
    
    }


    si cortas con \t pero no esta este separador no tendras ninguna efecto

    o mejor si separas el codigo

    string[] lineas = Clipboard.GetText().Split(new string[] { "\r\n" }, StringSplitOptions.None);

    foreach (string line in lineas){ }

    puedes usar el \r\n o el Environment.NewLine

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 13 de noviembre de 2017 13:01
  • Perfecto Jorge 

    era eso tio

    Un saludo


    ruben

    lunes, 13 de noviembre de 2017 14:39