none
Problemas con manejo de información de un gridview en asp.net RRS feed

  • Pregunta

  • Hola foro,

    Tengo unos problemitas, espero me puedan colaborar.

    Estoy trabajando con asp.net v2010.

    Cree por medio de código, las columnas de un gridview y las filas con un ciclos que llena desde sql:

    DataRow dtRow = dt.NewRow();
    dtRow[0] = grid.Rows[i][0].ToString();
    dtRow[1] = grid.Rows[i][1].ToString() + " " + grid.Rows[i][2].ToString() + " "+ grid.Rows[i][3].ToString();

    Mis inquietudes son:

    1. En dtRow[0],  necesito que cuando le den clic a esa información me redireccione o otro formulario?

    2. En dtRow[1] , necesito concatenar 3 datos pero en donde esta " ", insertar un salto de linea, no todo seguido?

    3. Es como ponerle anchos a cada columna, por si utilizo este código: gridview.Columns[1].ItemStyle.Width = 100; me dice que el index esta por fuera, como si no reconociera las columnas que he creado por código.

    Les agradecería muchísimo cualquier ayuda o guía para solucionar estos problemitas.

    Muchas gracias.




    jueves, 12 de marzo de 2015 15:28

Respuestas

  • Mariana.

    Ya entiendo. Una disculpa, no leí bien el segundo punto. Pero puedes usar el mismo evento RowDataBound, y buscas las celda en la que quieres colocar los saltos de linea y agregas "<br/>" en donde quieres los saltos.

    Además de esto debes asignarle la propuedad HTMLEncode = false a la celda. Con esto debe funcionar

    e.Row.Cells[indice].Text = e.Row.Cells[indiceCampo1] + "<br/>" + e.Row.Cells[indeiceCampo2] + "<br/>";

    e.Row.Cells[indice].HTMLEncode = false;

    Nota: Lo que escribió Jose, también deberia de funcionar.


    jueves, 12 de marzo de 2015 20:17

Todas las respuestas

  • Usted necesita aprender acerca del TemplateField.

    <asp:GridView runat="server" ID="gvData" AutoGenerateColumns="False">
        <AlternatingRowStyle CssClass="AlternatingDataRow" />
        <Columns>
            <asp:TemplateField HeaderText="Columna 0">
                <ItemTemplate>
                    <!--Asumiendo que la columna 0 es un ID de algún tipo:-->
                    <asp:HyperLink runat="server" ID="lnkColumna0"NavigateUrl="~/Otrapagina.aspx?ID=<%# Eval("NombreColumna0") %>"><%# EnableEventValidation("NombreColumna0") %></asp:HyperLink>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Columna 1">
                <ItemTemplate>
                    <%# Eval("NombreColumna1") %><br />
                    <%# Eval("NombreColumna2") %><br />
                    <%# Eval("NombreColumna3") %><br />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

    Algo así.


    Jose R. MCP
    Code Samples

    jueves, 12 de marzo de 2015 15:40
    Moderador
  • Hola Mariana.

    En el primer punto, puedes usar el evento RowDataBound para agregar un envento click que te redireccione a otra página.

    if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Attributes["onClick"] = string.Format(
                "window.location = 'OtroFormulario.aspx?ID={0}';",
                DataBinder.Eval(e.Row.DataItem, "MsgID"));
        }

    En el segundo punto puedes usar un string.Format, para concatenar los tres datos

     string.Format("{0},{1},{2}", parametro1, parametro2, parametro3); 

    Saludos

    jueves, 12 de marzo de 2015 15:41
  • >>necesito que cuando le den clic a esa información me redireccione o otro formulario?

    pero entonces no deberias definir esa columna como un link ? o un boton

    [ASP.NET] GridView – Edición Empleados

    en el articulo veras como definir una imagen como link para redireccionar al otro form enviando datos en la url

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 12 de marzo de 2015 15:47
  • Norberto Rojas, mil gracias la solución para el punto 1, funciono bien, pero aun no logro hacer los saltos de linea.
    jueves, 12 de marzo de 2015 16:08
  • Mariana.

    Ya entiendo. Una disculpa, no leí bien el segundo punto. Pero puedes usar el mismo evento RowDataBound, y buscas las celda en la que quieres colocar los saltos de linea y agregas "<br/>" en donde quieres los saltos.

    Además de esto debes asignarle la propuedad HTMLEncode = false a la celda. Con esto debe funcionar

    e.Row.Cells[indice].Text = e.Row.Cells[indiceCampo1] + "<br/>" + e.Row.Cells[indeiceCampo2] + "<br/>";

    e.Row.Cells[indice].HTMLEncode = false;

    Nota: Lo que escribió Jose, también deberia de funcionar.


    jueves, 12 de marzo de 2015 20:17