Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   .NET (http://www.forosdelweb.com/f29/)
-   -   Modificar tipo de dato en DataSet antes de cargarlo. (http://www.forosdelweb.com/f29/modificar-tipo-dato-dataset-antes-cargarlo-291665/)

Scour 23/04/2005 10:41

Modificar tipo de dato en DataSet antes de cargarlo.
 
Muy buenas, estoy haciendo un programa Windows Form en c# y por temas de portabilidad, todas las transferencias de datos entre SqlServer y la aplicación van por SOAP.

El caso es que un apartado del programa es sobre control de tiempo trabajado, de modo que los usuarios finales tendrán una lista de tareas en un DataGrid, y al seleccionar con un doble click una tarea, un reloj empezará a sumar tiempo, que finalmente se guardará en la Base de Datos. Ese campo en BD es de tipo DateTime, y yo lo que necesito es que en el DataGrid solo se reflejen HH:MM:SS, no la fecha. Del SOAP me traigo el DataSet, y ya en la aplicación, selecciono únicamente la hora con este código:

Código:

private void grilla()
{
        llamada = new Service1();
        DateTime[] hora = new DateTime[llamada.contar(Decimal.Parse(ident.Text))];
        DataSet ds = new DataSet();
        ds = llamada.rellena_grilla(Decimal.Parse(ident.Text));
        DG.DataSource = ds;
        int i;
        for (i = 0; i <= llamada.contar(Decimal.Parse(ident.Text)); i++)
        {
                hora[i] = DateTime.Parse(ds.Tables["Tareas"].Rows[i][2].ToString());
                DG[i,2] = hora[i].ToLongTimeString();
        }
}

Pero este código no funciona por que el DataGrid (DG) hereda los tipos de datos del DataSet, y al hacer esta operación:

DG[i,2] = hora[i].ToLongTimeString();

estoy asignando un tipo string a un tipo DateTime.

Lo que necesito es que al traerme el DataSet, pueda acceder al esquema antes de cargar el DataGrid y donde dice algo así como:

<xs:element name="tiempo" type="DateTime" />

(No recuerdo si la línea era exactamente así, pero no tengo acceso a la BD ahora mismo con lo que no puedo ejecutar el SOAP para ver el esquema del DataSet)

Pues donde dice el tipo de dato DateTime, cambiarlo por string.

Pues todo este rollo para eso, ¿Como puedo cambiar en el esquema de un DataSet el tipo de dato antes de hacer nada con él?

Muchas gracias de ante mano.

Un saludo.

xknown 23/04/2005 19:17

Puedes personalizar el Datagrid usando la clase DataGridTableStyle, añadir las columnas que quieres que se muestren y también definir el formato de estas columnas (utilizando la propiedad Format de éstas), por ejm para lo que mencionas te envío un pequeño ejemplo, muestra un DataGrid con una sóla columna y con el formato de la hora que especificas:

Código:

SqlDataAdapter da=new SqlDataAdapter("select OrderID, OrderDate from orders", "server=localhost;uid=sa;pwd=;database=northwind;");
DataSet ds=new DataSet();
da.Fill(ds, "Orders");
dg.DataSource=ds.Tables[0];

DataGridTableStyle pedidos = new DataGridTableStyle();
pedidos.MappingName = "Orders";

DataGridTextBoxColumn fecha= new DataGridTextBoxColumn();

fecha.MappingName = "OrderDate";
fecha.HeaderText = "Foo";
fecha.Format = "T"; // Muestra el formato HH:MM:SS

pedidos.GridColumnStyles.Add(date);
dg.TableStyles.Add(pedidos);

Para mayor información puedes ver la siguiente página

Saludos

Scour 24/04/2005 17:46

Muchas gracias por tu respuesta, efectivamente he acabado usando eso, es más trabajoso que lo que yo estaba pretendiendo, pero por lo visto no se puede cambiar el tipo de dato de un dataset ya cargado.

Muchas gracias.

Un saludo.


La zona horaria es GMT -6. Ahora son las 06:23.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.