2011-03-19 14 views
6

manera tengo una una matriz llamada:unión entre cuadrícula de datos y una serie

string[,] TableData; 

¿Puedo enlazar su contenido con un control DataGrid mediante la unión?

Si es posible, me gustaría que el usuario pueda editar la cuadrícula y reflejar los cambios en la matriz.

Respuesta

5

Ver esta pregunta: How to populate a WPF grid based on a 2-dimensional array

Puede usar this control llamado DataGrid2D (source code here). Para usarlo basta con añadir una referencia a DataGrid2DLibrary.dll, añadir este espacio de nombres

xmlns:dg2d="clr-namespace:DataGrid2DLibrary;assembly=DataGrid2DLibrary" 

y luego crear un DataGrid2D y enlazarlo a su IList, matriz 2D o matriz 1D como esto

<dg2d:DataGrid2D Name="dataGrid2D" 
       ItemsSource2D="{Binding Int2DList}"/> 

Los usuarios podrá editar los datos y los cambios realizados en el DataGrid se reflejarán en el Array 2D

+0

@Gracias Meleak, he estado leyendo eso pero estaba interesado en completar ** Cuadrícula de datos ** con una matriz 2D, no una cuadrícula de componentes. –

+0

@Jaime Oro: actualicé mi respuesta. Tuve el mismo requisito en un proyecto anterior y creé un 'DataGrid' subclasificado que puedes probar –

+0

¡Funciona a la perfección! Gracias Genious! –

2

No se puede unir una matriz a DataGrid. Sin embargo, dependiendo de lo que intente lograr, puede transformarlo en una matriz de class.

¿Cuál es el contenido de su matriz? ¿Por qué no intentas algo como esto?

public class MyClass 
{ 
    public string A { get; set; } 
    public string B { get; set; } 

    public MyClass(string a, string b) 
    { 
     Debug.Assert(a != null); 
     Debug.Assert(b != null); 

     this.A = a; 
     this.B = b; 
    } 
} 

Entonces instanciar algo de la siguiente manera:

MyClass[] source = { new MyClass("A", "B"), new MyClass("C", "D") }; 
this.dataGrid.ItemsSource = source; 

Alternativamente, si no se puede modificar el tipo de fuente, tratan de utilizar LINQ para proyectarla:

var source = (from i in Enumerable.Range(0, matrix.GetLength(0)) 
       select new MyClass(matrix[i, 0], matrix[i, 1])).ToList(); 
this.dataGrid1.ItemsSource = source; 
+0

El problema aquí es que mi Matrix puede tener cualquier cantidad de Cols/Filas. –

+0

Esto funcionó bien para mí: tenía un número fijo de columnas. Usé indexadores para poder acceder a él como una matriz o como una lista de datos enlazados . – RaoulRubin

+0

Este trabajo solo tiene un número estático de columnas y filas – rolls

1

La manera más fácil debería ser usar la compilación en WPF Datagrid y proyectar su Matriz a una clase de Vista que se enlazará.

¿Desea que sus usuarios puedan agregar filas? Si es así, no es posible enlazar a una matriz porque no puede agregar filas.

Si tiene cualquier cantidad de columnas, debería poder proyectar su matriz a un objeto dinámico y establecer la propiedad AutoGenerateColumns de la cuadrícula de datos en verdadero. ¿Sus columnas tienen nombres?

+0

Quiero que los usuarios puedan agregar filas y columnas. Cols no tienen nombres. –

Cuestiones relacionadas