miércoles 11 de noviembre de 2009

Aplicación Pomodoro en C# Mobile 6.5 – Copiar una selección de filas de un DataTable en otro DataTable

El desarrollo de software muchas veces es como un perro al sentarse. Damos vueltas y vueltas hasta que encontramos el lado que más nos parece el bueno.

Enunciado: Quiero leer un DataTable, seleccionar un conjunto de filas y devolverlo a la función que me ha invocado.

Primera aproximación. Obtengo una colección de filas con un .select() y las .add en un nuevo DataTable. MECK!! Error, eso no se puede hacer sin liarte con clonaciones y demás gaitas.

Segunda aproximación. Obtengo un DataView del DataTable filtrado en la instanciación por medio del rowFilter. MECK!! Me obliga a cambiar todo el código que utilice este método y que espere un DataTable.

Aproximación y resolución:

///
/// Devuelve el DataTable filtrado obtenido de la fuente de datos.
///
///
public DataTable leeTablaFiltrada()
{
DataTable tabla = new DataTable();
tabla = leeTabla(); // Función que recupera el DataTable de la fuente de datos.

DataView vista = new DataView(tabla, "tabla de filtro = 'valor de filtro' ", "tabla de ordenamiento DESC", DataViewRowState.CurrentRows);
// Tener cuidado de si la condicion de filtro es un string ponerlo entre comillas simples

return vista.ToTable(); // Este es el "milagro"
}

Moola!!

martes 10 de noviembre de 2009

Aplicación Pomodoro en C# Mobile 6.5 – selección de una misma fila en un DataGrid

Continuamos con la "pequeñas" diferencias al codificar para un control DataGrid para SmartPhone que hacen perder tanto tiempo.

El problema aparece cuando utilizamos el evento DataGrid_CurrentCellChanged para localizar el registro seleccionado en el DataGrid y abrir el formulario de edición con todos sus datos cargados.

Cuando hemos realizado los cambios y hemos vuelto a la vista del DataGrid, me encontré que no podía volver a editar la misma fila porque el evento solamente salta cuando se cambia de celda seleccionada.

Despúes de varios intentos con .select() y .CurrentRowIndex, con resultados nulos o erroneos, le dí una vuelta a los eventos que se actualizan por medio de la hoja de propiedades del control DataGrid desde el lado visual del Visual Studio (no me gusta esta forma pero es la más cómoda y menos intuitiva).

Aquí lo que hice fue decirle que en el evento Click del DataGrid, utilizará el mismo método suscritor que el que captura el CurrentCellChanged... y voala!! Todo funciona OK.

viernes 6 de noviembre de 2009

GridViewRowEventArgs diferencias en VB.net y C#

Mientras intento recuperar mi código del cronómetro Pomodoro, estoy adelantando un pequeño calendario para la página de mi club de Tiro con Arco.

Y recuperando un código antigüo que me mejora la interacción con el objeto GridView realizado en Visual Basic.NET, he visto que hay pequeñas y molestas diferencias sintácticas entre ambos lenguajes:

VB:
ClientScript.GetPostBackEventReference(sender, "$" & CType(e.Row.FindControl(""), Label).Text)

C#:
ClientScript.GetPostBackEventReference(((Control)sender), "$" + ((Label) e.Row.FindControl("")).Text));

Cosas a reseñar en C#.
1. El sender se debe convertir al tipo Control genérico. No es necesario específicar el tipo de control.
2. La traducción de la conversión desde VB CType(control, tipoDeControl) a C# es: ((tipoDeControl) control))

Que sea de ayuda.

sábado 31 de octubre de 2009

Una año más universitario.

Me dá un gustazo el haberme vuelto a matricular este año en la Universidad a Distancia, y además con un poquito de esfuerzo más me quito tres materias cuatrimensuales de largo camino hacia la ingeniería superior.

martes 27 de octubre de 2009

Aplicación Pomodoro en C# Mobile 6.5 – diferencias en el click de un DataGrid

En mi anterior post encontré una pequeña diferencia entre los controles dropDownList y comboList. Pero ahora traigo una diferencia que me ha comido el tarro un buen rato y de la que no he encontrado más ayuda que hacer doble click en el control en el Visual Studio…

¿Cómo capturar un click en un DataGrid para Smarthpone?

Ninguna de las siguientes funciona:
  • private void dgToDoToday_KeyDown(object sender, KeyEventArgs e)
  • private void dgToDoToday_MouseDown(object sender, KeyEventArgs e)
La forma, y mira que es retorcida y poco legible es:

private void dgToDoToday_CurrentCellChanged(object sender, EventArgs e)

Y para saber cual es la fila que se ha invocado:

DataGrid.CurrentRowIndex.ToString();

lunes 26 de octubre de 2009

Aplicación Pomodoro en C# Mobile 6.5 – diferencias entre un dropDownList y un comboList.

He de reconocer que el trabajo de la gente de Redmon con la normalización del lenguaje es absolutamente impresionante. Estoy escribiendo una aplicación para un teléfono móvil si prácticamente ninguna diferencia a si la estuviera escribiendo para el escritorio o para la Web.

Pero aquí hay una pequeña diferencia que me ha llamado la atencióny que quiero compartir/almacenar en este blog.

En este hilo describo como cargar los campos de texto y valor de un dropDownList. Pero para mi WM utilizo otro control que es el de comboList y que, usando la misma sintaxis, cambia el nombre de los parámetros. Lo cual quedaría asi:

cbToDoToday.DataSource = datos.tablaToDo; //El campo tablaToDo de la clase datos devuelve un dataTable.
cbToDoToday.ValueMember = "id";
cbToDoToday.DisplayMember = "descripcion";

Fijaros que es lo mismo que en un dropDownList pero en vez de usar el DataValueField y el DataTextField, aquí utilizamos el ValueMember y el DisplayMember.

Actualización: aún hay más.

En el dropdownMenu utilizamos el SelectedValue o SelectedText para capturar o seleccionar un item del control. Pero en el combo la cosa es, otra vez, un tanto extraña ya que se hace con el SelectedItem.

Curiosas estas pequeñas diferencias.

Open Agile Spain 2009 - Madrid.

Tengo tanto que contar y tanto han contado otros compañeros que debo sacar tiempo para editar, ordenar y escribir una entrada en condiciones... pero básicamente ha sido una reunión muy fructifera y reconfortante.

Gracias a la organización, patrocinadores y a todos los participantes.