none
Concatenar asp.net c# RRS feed

  • Pregunta

  • Hola, como les va?, espero que bien, les consulto sobre lo siguiente:

    Selecciono Curso de un GridCurso, y una Materia de una GrillaMateria, y cuando aprieto un Boton Nuevo, quiero que en un Label me aparezca el Mensaje: "Carga de asistencias de 1° A, Matematica", por ejemplo.........

    Pero me da el siguiente error, en la linea subrayada:

    "Index (zero based) must be greater than or equal to zero and less than the size of the argument list."

    Quiero saber cual seria el problema y como solucionarlo, y si esta bien construida la concatenacion??¡¡

    StringBuilder sb = new StringBuilder();
    
                    foreach(GridViewRow row in GridCurso.Rows)
                    {
                        sb.Append(string.Format("{0}, " + row.Cells[1].Text + row.Cells[2].Text));
                    }
    
                    StringBuilder sbs = new StringBuilder();
    
                    foreach(GridViewRow row in GridMateria.Rows)
                    {
                    sbs.Append(string.Format("{0}, " + row.Cells[1].Text));
                    }
    
                    lblCargaAsist.Text = "Carga de Asistencia de" + sb.ToString() + sbs.ToString();
    
     
    Saludos, abrazos, nos vemos...


    viernes, 19 de agosto de 2016 22:19

Respuestas

  • Hola GuilloFerrero,

    Está mal la estructura del String.Format.

    La estructura correcta sería : String.Format("formato", parámetros[])

    String.Format("{0} y {1}", valor1, valor2);

    Las posiciones comienzan con 0.

    Por lo que puedes hacer :

     sb.Append(string.Format("{0}", string.Concat(row.Cells[1].Text, row.Cells[2].Text)));
    sbs.Append(string.Format("{0}", row.Cells[1].Text));

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI


    viernes, 19 de agosto de 2016 22:27
  • hola

    mas alla del problema en el uso del string.Format() el cuals e soluciona tan simple como leyendo la documentacion

    Introducción al método String.Format

    con solo ver los ejemplos entiendes en que te estas equivocando

    -----

    Igual hay algo raro en el codigo que estas definiendo, porque la verdad no tiene mucho sentido

    si querias unir los cursos y materias podrias armar una lista y luego usar el string.Join()


    List<string> cursos = new List<string>();
    
    foreach(GridViewRow row in GridCurso.Rows)
    {
    	cursos.Add(row.Cells[1].Text + row.Cells[2].Text);
    }
    
    List<string> materias = new List<string>();
    
    foreach(GridViewRow row in GridMateria.Rows)
    {
    	materias.Add(row.Cells[1].Text);
    }
    
    string cursosStr = string.Join(", ", cursos);
    string materiasStr = string.Join(", ", materias);
    lblCargaAsist.Text = string.Format("Carga de Asistencia de {0} y materias: {1}", cursosStr, materiasStr);

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 20 de agosto de 2016 3:54

Todas las respuestas

  • Hola, El error te dice que el indice de la lista de elementos que quieres acceder es mayor al numero de items de la lista (basándose en cero).

    Por lo que veo, puede que quieras acceder a una celda de la fila que no existe.

    Comprueba que la celda 1 (row.Cells[1]) y 2 (row.Cells[2]) que quieres acceder existan. Cuenta las columnas empezando desde cero, es decir si quieres acceder a la primera columna deberías hacerlo así row.Cells[0].

    Espero sea de tu ayuda.

    Gracias.

    viernes, 19 de agosto de 2016 22:26
  • Hola GuilloFerrero,

    Está mal la estructura del String.Format.

    La estructura correcta sería : String.Format("formato", parámetros[])

    String.Format("{0} y {1}", valor1, valor2);

    Las posiciones comienzan con 0.

    Por lo que puedes hacer :

     sb.Append(string.Format("{0}", string.Concat(row.Cells[1].Text, row.Cells[2].Text)));
    sbs.Append(string.Format("{0}", row.Cells[1].Text));

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI


    viernes, 19 de agosto de 2016 22:27
  • GuilloFerrero,

    El método Format() toma los valores -pasados como argumentos- y los convierte en cadena según el formato establecido. El método Concat() concatena expresiones de cadena. Ambas formas son válidas, sin embargo no tiene sentido usar ambas a la vez:

    sb.Append(string.Format("{0}{1}", row.Cells[1].Text, row.Cells[2].Text));
    
    /*o*/
    sb.Append(string.Concat(row.Cells[1].Text, row.Cells[2].Text));



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    viernes, 19 de agosto de 2016 22:36
  • hola

    mas alla del problema en el uso del string.Format() el cuals e soluciona tan simple como leyendo la documentacion

    Introducción al método String.Format

    con solo ver los ejemplos entiendes en que te estas equivocando

    -----

    Igual hay algo raro en el codigo que estas definiendo, porque la verdad no tiene mucho sentido

    si querias unir los cursos y materias podrias armar una lista y luego usar el string.Join()


    List<string> cursos = new List<string>();
    
    foreach(GridViewRow row in GridCurso.Rows)
    {
    	cursos.Add(row.Cells[1].Text + row.Cells[2].Text);
    }
    
    List<string> materias = new List<string>();
    
    foreach(GridViewRow row in GridMateria.Rows)
    {
    	materias.Add(row.Cells[1].Text);
    }
    
    string cursosStr = string.Join(", ", cursos);
    string materiasStr = string.Join(", ", materias);
    lblCargaAsist.Text = string.Format("Carga de Asistencia de {0} y materias: {1}", cursosStr, materiasStr);

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 20 de agosto de 2016 3:54