7
votes

WPF DataGrid: Comment obtenez-vous le contenu d'une seule cellule?

Comment obtenez-vous le contenu d'une seule cellule d'une boîte à outils WPF DataGrid en C #?

Par le contenu, je veux dire un texte brut pouvant être là-bas.


3 commentaires

Je sais que cela pourrait sembler simple pour certains, mais je suis nouveau à WPF et j'essaie de faire quelque chose comme des formulaires avec un DataGridView et n'avez rien fait de similaire. Donc, une solution détaillée serait vraiment appréciée!


Peut-être que ce n'est pas si simple après tout ...


Je pense que je vais simplement utiliser un DataGridView de formulaires à l'aide de WindowsformSIntegration ...


3 Réponses :


1
votes

Normalement, le contenu d'une cellule DataGrid est liée à la base de données et reflète donc l'état d'une propriété (dans la plupart des cas) d'un objet qui est affiché dans une rangée donnée. Par conséquent, Il pourrait être plus facile d'accéder au modèle plutôt que de la vue.

avoir dit que (le modèle d'accès pas vue) ma question est la suivante: qu'est-ce que vous essayez de faire? Êtes-vous à la recherche de façons de traverser l'arborescence visuelle pour trouver le contrôle (ou les contrôles) rendu à l'écran? Comment vous attendez-vous à référencer la cellule, par indice de rangée et de colonne?


4 commentaires

Par exemple, avec une forme de formulaires DataGridView, vous pouvez faire quelque chose comme ceci: String CellContent = DataGridView1.Rows [0] .Cells [1] .tostring ();


Comment pouvez-vous faire quelque chose de similaire avec un DataGrid WPF?


Et oui, je veux pouvoir obtenir une cellule par l'index de ligne et de colonne.


Je cherche quelque chose comme ça aussi. Un bon exemple est que, dans DataGridView, vous pourriez faire une copie générique et coller de cette façon, mais cela semble être impossible dans WPF DataGrid. Quelqu'un a-t-il une perspicacité si cela pourrait être possible dans la prochaine version de WPF DataGrid?



6
votes

Suivre ce que Phillip a dit - le DataGrid code> est généralement lié aux données. Ci-dessous est un exemple où mon document code> DataGrid code> est lié à un Observablecollection code> où un nom PersonName code> est composé d'un prénom Code> et Nom code> (les deux chaînes).

Le DataGrid code> prend en charge la création automatique de la colonne afin que l'exemple soit assez simple. Vous verrez que je peux accéder aux lignes par leur index et obtenir la valeur d'une cellule dans cette ligne en utilisant le nom de la propriété correspondant au nom de la colonne. P>

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; }
        }
    }
}


3 commentaires

Merci! Je savais qu'il devait y avoir une manière ... un peu plus compliqué, puis un datagridview des formulaires mais WPF n'est pas aussi mature que des formes.


Aucun problème. Je pense que le Datagramrid Xece (tierce partie) utilise la construction DataGridView.


String publique FirstName {Obtenir; ensemble; } String Public String Nom {Obtenir; ensemble; } converti en propriété automatique: D



1
votes

Si vous vous moquez d'utiliser un jeu de données, vous pouvez obtenir la propriété DataRow de la propriété de l'élément de la ligne.

DataRowView rowView = e.Row.Item as DataRowView;


0 commentaires