2010-09-02 14 views
5

Tôi có một cột có thể định sẵn với nhiều cột và một biểu đồ dữ liệu mà tôi cần hiển thị chỉ một vài trong số các cột đó. Tôi cần một ví dụ về cách thực hiện. Tôi tìm thấy một loạt các ví dụ nói với tôi để biến AutoGenerateColumns thành true và thiết lập bảng dưới dạng DataContext để hiển thị tất cả các cột trong DataTable của tôi. Và tôi đoán sau đó tôi có thể đặt vào một trang mã để ẩn tất cả các cột mà tôi không cần, sắp xếp lại các cột còn lại theo thứ tự và kích thước thích hợp, nhưng chắc chắn phải có một cách thanh lịch hơn. Trong nhà thiết kế, tôi đã xây dựng bộ sưu tập các cột tôi muốn hiển thị, tôi nhận được dữ liệu, làm cách nào để ràng buộc cột dữ liệu hiện có vào một cột có thể định sẵn cụ thể trong mã của tôi?Trong WPF, làm thế nào tôi có thể ràng buộc cột dữ liệu vào một cột cụ thể của một datatable?

Trả lời

13

Liên kết DataTable của bạn với DataGrid, đặt AutoGenerateColumns thành False, sau đó thêm bất kỳ cột nào bạn muốn vào DataGrid.Columns. Dưới đây là một ví dụ sử dụng một DataTable gọi là Bộ sưu tập, với hai cột: ID và giá trị.

<DataGrid 
    ItemsSource="{Binding Path=Collection}" 
    AutoGenerateColumns=False 
    > 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Id" Binding="{Binding Path=Id}" /> 
     <DataGridTextColumn Header="Value" Binding="{Binding Path=Value}" /> 
    </DataGrid.Columns> 
</DataGrid> 
+1

Tôi bắt đầu thấy lý do tại sao XAML thật tuyệt vời. –

4

Ràng buộc XAML sẽ không hoạt động đối với tôi vì DataTable của tôi được tạo khi chạy nên không có gì để ràng buộc vào lúc thiết kế. Dù sao, tôi tình cờ tìm cách làm những gì tôi muốn ở đây.

Vấn đề của tôi là vì một số lý do không có lỗi khi tôi đặt ItemSource vào bảng, thay vì bảng DefaultView, mặc dù sau này tôi đọc, bảng không thực hiện giao diện được yêu cầu. Nhưng không có bất kỳ lỗi nào để cho tôi biết sự khác biệt, tôi không có gì để tìm hiểu lý do tại sao lưới của tôi sẽ hiển thị trống.

DataGridName.DataContext = DataSetName.DataTableName; 
DataGridName.ItemsSource = DataSetName.DataTableName.DefaultView; 

((DataGridTextColumn)DataGridName.Columns[1]).Binding = new Binding("DataTableColumnName1"); 
((DataGridTextColumn)DataGridName.Columns[0]).Binding = new Binding("DataTableColumnName2"); 
((DataGridTextColumn)DataGridName.Columns[2]).Binding = new Binding("DataTableColumnName3");