Principales respuestas
Problemas con manejo de información de un gridview en asp.net

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.
- Editado Mariana Zapata jueves, 12 de marzo de 2015 15:39
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.
- Marcado como respuesta Karen MalagónModerator martes, 17 de marzo de 2015 22:27
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- Propuesto como respuesta Karen MalagónModerator viernes, 13 de marzo de 2015 16:01
-
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
- Propuesto como respuesta Karen MalagónModerator viernes, 13 de marzo de 2015 16:01
-
>>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 -
Norberto Rojas, mil gracias la solución para el punto 1, funciono bien, pero aun no logro hacer los saltos de linea.
-
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.
- Marcado como respuesta Karen MalagónModerator martes, 17 de marzo de 2015 22:27