2010-07-30 13 views
1

J'essaye de trouver comment lire la valeur de mes cellules de grilles de données WPF.WPF Datagrid lit une valeur de cellule

quelque chose le long des lignes de

String myString = myDataGrid.Cells[1][2].ToString(); 

la grille de données a été créée en XAML et j'ai peuplé la grille de données avec des données de ligne en utilisant

reportGrid.Items.Add(new cbResultRow() { ... }); 

maintenant je veux revenir en arrière et lire la cellule valeurs dans mon DataGrid.

J'ai vu quelques exemples de lecture de données à partir d'une ligne ou d'une cellule sélectionnée, car je n'ai aucune sélection (l'utilisateur n'interagit pas avec la grille de données).

j'ai également le code vu comme

foreach(DataGridRow myrow in myDataGrid.Rows) 

mais le compilateur dit lignes n'est pas membre de DataGrid.

J'ai cherché pendant plusieurs heures pour essayer de savoir comment faire ce que j'aurais cru être une chose très simple!

s'il vous plaît aider,

Merci, volonté.

Répondre

2

La grille de données WPF a été créée pour se lier à quelque chose comme un DataTable. La plupart du temps, vous allez modifier le DataTable et les lignes/colonnes dans le DataTable lié au DataGrid.

Le DataGrid lui-même est l'élément visuel pour le DataTable. Here is a pretty good tutorial on how to do this. Modifier les données dans une boucle ressemblerait à ceci.

foreach(DataRow row in myTable.Rows) 
{ 
    row["ColumnTitle"] = 1; 
} 

Ce serait tout simplement que toutes les valeurs dans la colonne « ColumnTitle » égal à 1. Pour accéder à une seule cellule, il ressemblerait à quelque chose comme ça.

myTable.Rows[0][0] = 1; 

Ce fixerait la première cellule dans votre DataTable à 1.

+0

Merci pour la réponse, je l'avais déjà fait similaire à ce que vous avez suggéré en créant d'abord une liste (car il n'y a pas de datatable) et en liant le datag débarrasser de la liste, mais je voulais vraiment savoir s'il existe un moyen d'accéder aux données de la cellule directement à partir de la grille de données. – dontpanic

+0

@dontpanic il n'y a pas. Et à l'avenir, vous constaterez qu'une liste ne fonctionne pas aussi bien qu'un DataTable. Je préférerais même une ObservableCollection sur une liste. – jsmith

2

Cela pourrait aider quelqu'un d'autre.

foreach (DataRowView row in dgLista.SelectedItems) 
{ 
    string text = row.Row.ItemArray[index].ToString(); 
} 

Bonne chance!

+1

Bonne idée. Juste un mot d'avertissement: Cela ne fonctionnera que dans les situations les plus basiques, où votre source de données est un 'DataView' et votre' DataGrid' montre toutes les colonnes de la source de données dans le même ordre, c.-à-d. utilisé. – dotNET

0

Voici un résumé de la solution.

Winform

Type: System.windows.Forms.DataGridView

// C# 
foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    //"Column1" = column name in DataGridView 
    string text = row.Cells["Column1"].value.ToString(); 
} 

WPF équivalent

Type: DataGrid

// C# 
foreach (DataRowView row in dataGrid.Items) 
{ 
    string text = row.Row.ItemArray[index].ToString(); 
} 
Questions connexes