7

如何在 C# 中获取 WPF 工具包 DataGrid 的单个单元格的内容?

我所说的内容是指可能存在的一些纯文本。

4

3 回答 3

6

按照菲利普所说的 -DataGrid通常是数据绑定的。下面是一个示例,其中我的 WPFDataGrid绑定到ObservableCollection<PersonName>aPersonName由 aFirstNameLastName(两个字符串)组成。

支持自动列创建,DataGrid因此示例非常简单。您将看到我可以通过索引访问行,并通过使用与列名对应的属性名称来获取该行中单元格的值。

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; }
        }
    }
}
于 2009-08-18T22:20:13.167 回答
1

通常,DataGrid 单元格的内容是数据绑定的,因此反映了在给定行中显示的对象的属性状态(在大多数情况下)。因此,访问模型可能比访问视图更容易。

话虽如此(访问模型不是视图),我的问题是:你想做什么?您是否正在寻找遍历可视化树以找到在屏幕上呈现的控件(或多个控件)的方法?您希望如何按行和列索引引用单元格?

于 2009-08-18T19:49:29.430 回答
1

如果使用 DataTable 绑定,则可以从 Row 的 Item 属性中获取 DataRowView。

DataRowView rowView = e.Row.Item as DataRowView;
于 2009-08-19T14:30:10.443 回答