Necesito con las columnas dinámicas en ASP

Necesito darle Formato a mi columna Cantidad en Asp.Net osea que solamente muestre 2 decimales mi columna Cantidad,
el Problema es que mis columnas son dinámicas es decir se generan automáticamente y no le puedo dar el Formato a mano desde el HTML,
el por que las genero automáticamente es: POR QUE ESTOY MANEJANDO 2 ORÍGENES DE DATOS, espero me puedas ayudar con este formato :P

3 respuestas

Respuesta
1

Si creas de manera dinámica las columnas del GridView puedes colocar las propiedades de la columna como HtmlEncoder = false y en el DataStringFormat = {0:n,2}

donde esta HtmlEncoder?

En las propiedades de la columna de la grilla

Experto pero cuando creas las columnas de Forma automática no existe ninguna columna en el grid, entonces como encuentro las propiedades de la columna para para poner HtmlEncoder = false

Si vas a colocarle formato a las columnas, así sea a una sola, no puedes crear las columnas de manera automática, si lo deseas debes dejar que el formato lo coloque de manera automática cuando se llene la grilla.

experto me puedes explicar este concepto por favor:

si lo deseas debes dejar que el formato lo coloque de manera automática cuando se llene la grilla.

Como tu llenas la grilla y las columnas se crean automáticamente no puedes acceder para darle formato a una columna.

Respuesta
1

¿Puedes pegarme el código de tu DataGrid o GridView para ver como creas la tabla?

¿Entiendo qué estás trabajando con Web Forms y no con MVC no?

Claro Experto aquí esta:

<div id="grid">

<asp:GridView ID="ConsultaDGV" runat="server" AllowPaging="True" AllowSorting="True"PageSize="20" Width="100%" DataKeyNames="ProductoCve" DataSourceID="ProduccionporPeriodoODS"OnRowCreated="ConsultaDGV_RowCreated" EnablePersistedSelection="True"SelectedRowStyle-CssClass="seleccionado"AlternatingRowStyle-CssClass="alternado"><AlternatingRowStyle CssClass="alternado" /><HeaderStyle BackColor="#003399" ForeColor="White" /><SelectedRowStyle CssClass="seleccionado" /></asp:GridView><asp:ObjectDataSource ID="ProduccionporLineaPeriodoODS" runat="server" SelectMethod="ProduccionporLineaPeriodo"TypeName="ibSoft.ProduccionBll.RepProduccionBll"><SelectParameters><asp:ControlParameter ControlID="FechaInicialtxt" Name="FechaInicial" PropertyName="Text"Type="DateTime" /><asp:ControlParameter ControlID="FechaFinaltxt" Name="FechaFinal" PropertyName="Text"Type="DateTime" /><asp:ControlParameter ControlID="Busquedatxt" Name="Busqueda" PropertyName="Text"Type="String" /></SelectParameters></asp:ObjectDataSource><asp:ObjectDataSource ID="ProduccionporPeriodoODS" runat="server" SelectMethod="ProduccionporPeriodo"TypeName="ibSoft.ProduccionBll.RepProduccionBll"><SelectParameters><asp:ControlParameter ControlID="FechaInicialtxt" Name="FechaInicial" PropertyName="Text"Type="DateTime" /><asp:ControlParameter ControlID="FechaFinaltxt" Name="FechaFinal" PropertyName="Text"Type="DateTime" /><asp:ControlParameter ControlID="Busquedatxt" Name="Busqueda" PropertyName="Text"Type="String" /></SelectParameters></asp:ObjectDataSource></div>

Lo primero que debes hacer es añadir las columnas a mano en lugar de dejar que se autogeneren.

Para ello debes agregar la colucción "Columns" y añadir todas las columnas que quieres mostrar en tu Grid del siguiente modo:

<columns>
    <asp:BoundField DataFieldSet="NOMBRE DEL CAMPO" HeaderText="Texto que aparece en la cabecera de la columna" />
</columns>

Para dar un formato en concreto (en este caso quieres dar formato de dos decimales a una columna cuyo campo es "Cantidad" habrías de hacer uso de la propiedad "DataFormaString":

<columns>
     <asp:BoundField DataFieldSet="Cantidad" HeaderText="Cantidad" DataFormatString="{0:N2}" />
</columns>

Esto indica que el número "cantidad" se muestra con dos decimales (si este campo es de texto en base de datos la cosa es más complicada).

Por lo que, cogiendo tu ejemplo, el grid quedaría así:

 <asp:GridView ID="ConsultaDGV" runat="server" AllowPaging="True" AllowSorting="True"
 PageSize="20" Width="100%" DataKeyNames="ProductoCve" DataSourceID="ProduccionporPeriodoODS"
 OnRowCreated="ConsultaDGV_RowCreated" EnablePersistedSelection="True" SelectedRowStyle-CssClass="seleccionado"
 AlternatingRowStyle-CssClass="alternado">
     <AlternatingRowStyle CssClass="alternado" />
     <HeaderStyle BackColor="#003399" ForeColor="White" />
     <SelectedRowStyle CssClass="seleccionado" />
     <Columns>
         <asp:BoundField DataFieldSet="Cantidad" HeaderText="Cantidad" DataFormatString="{0:N2}" />
         <asp:BoundField DataFieldSet="Otra Columna" HeaderText="Otra Columna" />
             ...
         <asp:BoundField DataFieldSet="Última Columna" HeaderText="Última Columna" />
     </Columns>
</asp:GridView>

como manejo 2 orígenes de datos en la misma pantalla necesito generarlas automáticamente por que cada origen de datos tiene sus propias columnas por tal motivo no puedo ponerlas a mano por queme truena,

Entonces se me ocurre que, o bien tengas dos GridViews (uno para cada Source) y pongas invisible el que no se esté usando, o bien hagas que, en base de datos, el dato ya esté formateado con dos decimales.

Hay otras soluciones pero son más complejas (como sobreescribir el evento OnItemCreated del GridView y cuando el item que esté cargando se llame "Cantidad" formateas el value) pero no se si vale la pena complicarlo tanto.

como es la opción complicada experto?

Puedes sobreescribir el evento "RowDataBound" que se ejecuta cada vez que se crea una fila y, si la row es "Cantidad", le damos el formato de dos decimales que quieres:

protected void MiGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[posicion de la columna "cantidad"].Text 
            = DataBinder.Eval(e.Row.DataItem,"Cantidad").ToString("{0:N2}");
    }
}
Respuesta
1

Disculpa la demora, pero en esta temporada estoy muy complicado de tiempo, veamos si entendí bien tu pregunta (espero que sea así), la manera de darle formato sería verificando que la propiedad HtmlEncode, este en falso, para que le des el formato que desees en la propiedad de la columna que crees dinámicamente, te adjunto un link de soporte.

http://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.boundfield.dataformatstring(VS.80).aspx

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas