Foros del Web » Programación para mayores de 30 ;) » .NET »

Modificar tipo de dato en DataSet antes de cargarlo.

Estas en el tema de Modificar tipo de dato en DataSet antes de cargarlo. en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/04/2005, 10:41
Avatar de Scour  
Fecha de Ingreso: octubre-2003
Ubicación: Murcia (España)
Mensajes: 94
Antigüedad: 21 años
Puntos: 0
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.
  #2 (permalink)  
Antiguo 23/04/2005, 19:17
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 10 meses
Puntos: 7
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
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 24/04/2005, 17:46
Avatar de Scour  
Fecha de Ingreso: octubre-2003
Ubicación: Murcia (España)
Mensajes: 94
Antigüedad: 21 años
Puntos: 0
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:52.