2009-08-18 17 views
6

Come si ottiene il contenuto di una singola cella di un toolkit WPF DataGrid in C#?DataGrid WPF: come si ottiene il contenuto di una singola cella?

Per contenuto intendo un testo semplice che potrebbe essere lì dentro.

+0

So che potrebbe sembrare semplice per alcuni, ma io sono nuovo di WPF e ho cercato di fare qualcosa di simile in Forms con un DataGridView e non sono riuscito a fare qualcosa di simile. Quindi una soluzione dettagliata sarebbe molto apprezzata! – Partial

+0

Forse non è così semplice ... – Partial

+0

Penso che userò semplicemente un DataGridView da Forms con l'aiuto di WindowsFormsIntegration ... – Partial

risposta

6

A seguito di ciò che ha detto Phillip - il DataGrid è in genere associato ai dati. Di seguito è un esempio in cui il mio WPF DataGrid è associato a un ObservableCollection<PersonName> dove uno PersonName è composto da un FirstName e LastName (entrambe le stringhe).

Il DataGrid supporta la creazione automatica di colonne in modo che l'esempio sia piuttosto semplice. Vedrai che posso accedere alle righe tramite il loro indice e ottenere il valore di una cella in quella riga usando il nome della proprietà che corrisponde al nome della colonna.

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for Window1.xaml 
    /// </summary> 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      // Create a new collection of 4 names. 
      NameList n = new NameList(); 

      // Bind the grid to the list of names. 
      dataGrid1.ItemsSource = n; 

      // Get the first person by its row index. 
      PersonName firstPerson = (PersonName) dataGrid1.Items.GetItemAt(0); 

      // Access the columns using property names. 
      Debug.WriteLine(firstPerson.FirstName); 

     } 
    } 

    public class NameList : ObservableCollection<PersonName> 
    { 
     public NameList() : base() 
     { 
      Add(new PersonName("Willa", "Cather")); 
      Add(new PersonName("Isak", "Dinesen")); 
      Add(new PersonName("Victor", "Hugo")); 
      Add(new PersonName("Jules", "Verne")); 
     } 
    } 

    public class PersonName 
    { 
     private string firstName; 
     private string lastName; 

     public PersonName(string first, string last) 
     { 
      this.firstName = first; 
      this.lastName = last; 
     } 

     public string FirstName 
     { 
      get { return firstName; } 
      set { firstName = value; } 
     } 

     public string LastName 
     { 
      get { return lastName; } 
      set { lastName = value; } 
     } 
    } 
} 
+0

Grazie! Sapevo che doveva esserci un modo ... Un po 'più complicato di un DataGridView da Forms, ma WPF non è maturo come Forms. – Partial

+0

Nessun problema. Penso che il DataGrid di Xceed (di terze parti) usi il costrutto DataGridView. –

+0

'stringa pubblica FirstName {get; impostato; } public string LastName {get; impostato; } ' Converti in auto-proprietà: D – TheGeekZn

1

In genere, il contenuto di una cella DataGrid è associato a dati e pertanto riflette lo stato di una proprietà (nella maggior parte dei casi) di un oggetto che viene visualizzato in una determinata riga. Quindi potrebbe essere più semplice accedere al modello piuttosto che alla vista.

Detto questo (il modello di accesso non visualizza) la mia domanda è: cosa stai cercando di fare? Sei alla ricerca di modi per attraversare l'albero visivoper trovare il controllo (o controlli) che viene visualizzato sullo schermo? Come pensi di fare riferimento alla cella, per indice di righe e colonne?

+0

Ad esempio, con un DataGridView di Form si può fare qualcosa del genere: string cellContent = dataGridView1.Rows [0] .Cells [1] .toString(); – Partial

+0

Come si può fare qualcosa di simile con un datagrid WPF? – Partial

+0

E sì, voglio essere in grado di ottenere una cella per indice di righe e colonne. – Partial

1

Se si esegue il bind utilizzando un DataTable, è possibile ottenere il DataRowView dalla proprietà Item della riga.

DataRowView rowView = e.Row.Item as DataRowView; 
Problemi correlati