2010-06-12 24 views
7

En mi aplicación Windows Mobile .NET tengo una matriz simple de objetos con los datos que quiero mostrar en mi DataGrid. Para ello, simplemente llame a:Matriz como DataSource de un DataGrid: cómo personalizar columnas?

myDataGrid.DataSource = myArray;

Esto funciona, pero tengo un problema con él: utiliza todas las propiedades como columnas y utiliza los nombres de las propiedades que los encabezados de columna. No puedo encontrar la manera de personalizar dos cosas:

  • Seleccione el subconjunto de propiedades se debe mostrar como columnas (digamos que tiene un ID, Nombre y propiedad Value, yo sólo quieren mostrar Nombre y Valor);

  • Cambie el nombre de los encabezados de las columnas para que tengan más sentido (por ejemplo, si la propiedad se llama ID, muestre un encabezado de columna que diga "Número").

¿Es esto posible en absoluto?

Como se mencionó, esta es una aplicación de Windows Mobile .NET (versión 2).

Respuesta

1

Debe establecer la propiedad Datagrid.TableStyles para personalizar el diseño.

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagrid.tablestyles.aspx

Más detalles sobre la unión a una matriz de objetos aquí: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridtablestyle.mappingname(VS.71).aspx

para unir el System.Windows.Forms.DataGrid a una serie inflexible de tipos de objetos, la el objeto debe contener propiedades públicas. Para crear un DataGridTableStyle que muestra como una matriz, establezca la propiedad MappingName en classname [] donde classname se reemplaza por el nombre de clase . También tenga en cuenta que la propiedad MappingName es distingue entre mayúsculas y minúsculas.

+0

Ya encontré esto, pero no sé cómo funcionarían con una matriz como DataSource. La única información que puedo encontrar es usarla junto con una DataTable. – pbean

+0

Ah esto funciona. Un muy buen ejemplo está aquí: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridtablestyle.mappingname.aspx – pbean

+1

@pbean - ¡me alegra oír que funciona! – code4life

0

¿No sé si conoce el nombre de las columnas con antelación? Pero si es el caso, puede ir a "Editar Columnas" de su DataGridView y simplemente crear sus columnas allí. En la categoría "Datos", cambie "Nombre de propiedad de datos" de "(ninguno)" al nombre de la propiedad de clase. Desde allí puede personalizar el nombre, si está visible, el tamaño, etc. El DataGrid lo vinculará a su DataSource.

Además, hay una propiedad "DataGridView.AutoGenerateColumns" que puede establecer en falso para que no tenga que enlazar todas las propiedades de su objeto. Pensé que también podría ayudar.

+0

Desafortunadamente no se trata de un DataGridView sino de un DataGrid (el predecesor) y no puedo editar las columnas en tiempo de diseño como puedo con un DataGridView en un formulario "normal" (Windows). – pbean

+0

Por lo tanto, tiene que hacerlo a mano a través de los tablesstyles: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridtablestyle(v=VS.100).aspx Pero yo supongamos que puede heredar de DataGrid y crear sus propias propiedades que se correlacionen con tableStyles para que pueda usar el diseñador. Pero si tu intención es hacer eso para una mesa, puede que no valga la pena. – Sauleil

0

En este código _im es un objeto de tabla y ato este objeto con DataGridView dgvItem después de vincularlo Cambio el texto del encabezado de dgvItem según sea necesario.

dgvItem.Rows.Clear(); 
    dgvItem.DataSource = _im ; 
    dgvItem.Columns[2].HeaderText = "Mobile Code"; 
    dgvItem.Columns[3].HeaderText = "Mobile Name"; 
Cuestiones relacionadas