2009-08-18 63 views
6

Làm thế nào để bạn có được nội dung của một ô đơn lẻ của bộ công cụ WPF DataGrid trong C#?WPF DataGrid: Làm thế nào để bạn có được nội dung của một ô?

Theo nội dung tôi ngụ ý một số văn bản thuần túy có thể ở trong đó.

+0

Tôi biết điều này nghe có vẻ đơn giản đối với một số người, nhưng tôi mới sử dụng WPF và đã cố gắng thực hiện điều gì đó như trong Biểu mẫu với DataGridView và không làm được gì tương tự. Vì vậy, một giải pháp chi tiết sẽ được thực sự đánh giá cao! – Partial

+0

Có lẽ nó không đơn giản sau khi tất cả ... – Partial

+0

Tôi nghĩ rằng tôi sẽ chỉ sử dụng một DataGridView từ các hình thức với sự giúp đỡ của WindowsFormsIntegration ... – Partial

Trả lời

6

Theo những gì Phillip đã nói - số DataGrid thường bị ràng buộc dữ liệu. Dưới đây là ví dụ trong đó WPF DataGrid của chúng tôi được gắn với một số ObservableCollection<PersonName> trong đó PersonName bao gồm một số FirstNameLastName (cả hai chuỗi).

DataGrid hỗ trợ tạo cột tự động để ví dụ này khá đơn giản. Bạn sẽ thấy rằng tôi có thể truy cập các hàng theo chỉ mục của chúng và nhận giá trị của một ô trong hàng đó bằng cách sử dụng tên thuộc tính tương ứng với tên cột.

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

Cảm ơn bạn! Tôi biết đã có một số cách ... Một chút phức tạp hơn sau đó một DataGridView từ hình thức nhưng WPF không phải là trưởng thành như hình thức. – Partial

+0

Không sao cả. Tôi nghĩ rằng Xceed (bên thứ ba) DataGrid sử dụng cấu trúc DataGridView. –

+0

'chuỗi công khai FirstName {get; bộ; } chuỗi công khai LastName {get; bộ; } ' Chuyển đổi sang thuộc tính tự động: D – TheGeekZn

1

Thông thường, nội dung của ô DataGrid bị ràng buộc dữ liệu và do đó phản ánh trạng thái của thuộc tính (trong hầu hết các trường hợp) của đối tượng đang được hiển thị trong một hàng nhất định. Do đó, có thể dễ dàng truy cập vào mô hình hơn là chế độ xem.

Có nói rằng (mô hình truy cập không xem) câu hỏi của tôi là: bạn đang cố gắng làm gì? Bạn đang tìm kiếm các cách để duyệt qua cây trực quan để tìm điều khiển (hoặc điều khiển) được hiển thị trên màn hình? Làm thế nào để bạn mong đợi để tham khảo các tế bào, theo chỉ số hàng và cột?

+0

Ví dụ, với một hình thức DataGridView bạn có thể làm một cái gì đó như thế này: string cellContent = dataGridView1.Rows [0] .Cells [1] .ToString(); – Partial

+0

Làm thế nào bạn có thể làm một cái gì đó tương tự với một DataGrid WPF? – Partial

+0

Và có, tôi muốn có thể lấy ô theo chỉ mục hàng và cột. – Partial

1

Nếu bạn liên kết bằng cách sử dụng DataTable, bạn có thể lấy DataRowView từ thuộc tính Mục của hàng.

DataRowView rowView = e.Row.Item as DataRowView; 
Các vấn đề liên quan