کنترل Datagrid در WPF
DataGrid کنترلی است که داده ها را در یک Grid (خانه خانه یا به صورت جدولی) قابل شخص سازی نمایش می دهد. این کنترل یک راه ساده و انعطاف پذیر برای نمایش مجموعه ای از داده ها به صورت سطرها و ستونها ارائه می دهد. در تصویر زیر می توانید سلسله مراتب مربوط به ارث بری کنترل DataGrid را مشاهده کنید.
خاصیت های پرکاربرد
در جدول زیر می توانید خاصت های پر استفاده مربوط به DataGrid را به همراه توضیح مختصری در مورد هر کدام مشاهده کنید.
ردیف | توضیحات |
۱ | AlternatingRowBackground به منظور گرفتن یا تنظیم رنگ پس زمینه متناوب سطرها استفاده می شود. |
۲ | AreRowDetailsFrozen به منظور گرفتن یا تنظیم مقداری استفاده می شود که مشخص کننده این است که آیا جزئیات سطر قابل اسکرول شدن به صورت افقی است یا خیر. |
۳ | AutoGenerateColumns به منظور گرفتن یا تنظیم مقداری استفاده می شود که مشخص کننده این است که آیا ستون ها به صورت خودکار ایجاد شوند یا خیر. |
۴ | CanUserAddRows به منظور گرفتن یا تنظیم مقداری استفاده می شود که مشخص کننده این است که آیا کاربر می تواند سطر جدیدی به دیتاگرید اضافه کند یا خیر. |
۵ | CanUserDeleteRows به منظور گرفتن یا تنظیم مقداری استفاده می شود که مشخص کننده این است که آیا کاربر می تواند سطری از دیتاگرید را حذف کند یا خیر. |
۶ | CanUserReorderColumns به منظور گرفتن یا تنظیم مقداری استفاده می شود که مشخص کننده این است که آیا کاربر می تواند ترتیب ستون ها را به وسیله کشیدن و رها کردن هدر ها تغییر دهد یا خیر. |
۷ | CanUserResizeColumns به منظور گرفتن یا تنظیم مقداری استفاده می شود که مشخص کننده این است که آیا کاربر می تواند عرض ستون ها را تغییر دهد یا خیر. |
۸ | CanUserResizeRows به منظور گرفتن یا تنظیم مقداری استفاده می شود که مشخص کننده این است که آیا کاربر می تواند عرض و ارتفاع سطرها را تغییر دهد یا خیر. |
۹ | CanUserSortColumns به منظور گرفتن یا تنظیم مقداری استفاده می شود که مشخص کننده این است که آیا کاربر می تواند با کلیک کردن بر روی هدر ستون ها ترتیب داده ها را تغییر دهد یا خیر. |
۱۰ | ColumnHeaderHeight به منظور گرفتن یا تنظیم ارتفاع هدر ستون ها استفاده می شود. |
۱۱ | ColumnHeaderStyle به منظور گرفتن یا تنظیم استایل مربوط به هدر ستون های دیتاگرید استفاده می شود. |
۱۲ | Columns به منظور گرفتن مجموعه ای که شامل کل ستون های دیتاگرید است، استفاده می شود. |
۱۳ | ColumnWidth به منظور گرفتن یا تنظیم عرض استاندارد و حالت سایز بندی ستون ها و هدرهای دیتاگرید استفاده می شود. |
۱۴ | CurrentCell به منظور گرفتن یا تنظیم سلولی که دارای فوکوس است، استفاده می شود. |
۱۵ | CurrentColumn به منظور گرفتن یا تنظیم ستون جاری (انتخاب شده) استفاده می شود. |
۱۶ | CurrentItem به منظور گرفتن آیتم جاری (انتخاب شده) استفاده می شود. |
۱۷ | FrozenColumnCount به منظور گرفتن یا تنظیم تعداد ستون های غیر پیمایشی استفاده می شود. |
۱۸ | HorizontalScrollBarVisibility به منظور گرفتن یا تنظیم مقداری استفاده می شود که مشخص کننده این است که آیا اسکرول بار افقی نمایش داده شود یا خیر. |
۱۹ | IsReadOnly به منظور گرفتن یا تنظیم مقداری استفاده می شود که مشخص کننده این است که کاربر می تواند مقادیر را در DataGrid ویرایش کند یا خیر. |
۲۰ | RowBackground به منظور گرفتن یا تنظیم رنگ پس زمینه پیشفرض برای سطرها استفاده می شود. |
۲۱ | RowHeight به منظور گرفتن یا تنظیم ارتفاع سطرها استفاده می شود. |
۲۲ | SelectedCells به منظور گرفتن لیست سلولی هایی که به صورت انتخاب شده هستند، استفاده می شود. |
متدهای پرکاربرد
در جدول زیر می توانید متدهای پر استفاده مربوط به DataGrid را به همراه توضیح مختصری در مورد هر کدام مشاهده کنید.
ردیف | توضیحات |
۱ | BeginEdit دستور BeginEditCommand را فراخوانی می کند که وضعیت سلول یا سطر جاری را به حالت ویرایش تغییر می دهد. |
۲ | CancelEdit دستور CancelEditCommand را برای سلول یا سطری فراخوانی می کند که در حالت ویرایش قرار دارد. |
۳ | ClearDetailsVisibilityForItem به منظور پاک کردن مقدار خاصیت DetailsVisibility برای سطری که اطلاعات آیتم مشخص شده را نمایش می دهد، استفاده می شود. |
۴ | ColumnFromDisplayIndex به منظور گرفتن DataGridColumn در اندیس مشخص شده استفاده می شود. |
۵ | CommitEdit دستور CommitEditCommand را برای سلول یا سطری فراخوانی می کند که در حالت ویرایش است. |
۶ | GenerateColumns برای هر یک از خاصیت های شیء مشخص شده، ستون ایجاد می کند. |
۷ | GetDetailsVisibilityForItem به منظور گرفتن مقدار خاصیت DetailsVisibility برای سطری که اطلاعات آیتم مشخص شده را نمایش می دهد، استفاده می شود. |
۸ | ScrollIntoView به منظور تنظیم اسکرول عمودی بر روی سطر مشخص شده استفاده می شود. |
۹ | SelectAllCells به منظور انتخاب کل سلول های دیتاگرید استفاده می شود. |
۱۰ | SetDetailsVisibilityForItem به منظور تنظیم مقدار خاصیت DetailsVisibility برای سطری که اطلاعات آیتم مشخص شده را نمایش می دهد، استفاده می شود. |
۱۱ | UnselectAllCells سلول های انتخاب شده را از حالت انتخاب شده در میاورد. |
رویدادهای پرکاربرد
در جدول زیر می توانید رویدادهای پر استفاده مربوط به DataGrid را به همراه توضیح مختصری در مورد هر کدام مشاهده کنید.
ردیف | توضیحات |
۱ | AddingNewItem قبل از اضافه شدن آیتم جدید رخ می دهد. |
۲ | AutoGeneratedColumns زمانی که ایجاد خودکار ستون ها کامل شود، رخ می دهد. |
۳ | AutoGeneratingColumn زمانی که ستونی به صورت خودکار ایجاد می شود، رخ می دهد. |
۴ | BeginningEdit قبل از تغییر حالت سلول به حالت ویرایش، رخ می دهد. |
۵ | CellEditEnding قبل از اینکه عملیات ویرایش سلول کامل یا لغو شود، رخ می دهد. |
۶ | CurrentCellChanged زمانی که مقدار خاصیت CurrentCell تغییر کند، رخ می دهد. |
۷ | InitializingNewItem زمانی که یک آیتم جدید ایجاد شود، رخ می دهد. |
۸ | PreparingCellForEdit زمانی که یک سلول به حالت ویرایش وارد می شود، رخ می دهد. |
۹ | RowDetailsVisibilityChanged زمانی که وضعیت عنصر مربوط به جزئیات یک سطر تغییر می کند، رخ می دهد. |
۱۰ | RowEditEnding قبل از کامل یا لغو شدن عملیات ویرایش یک سطر رخ می دهد. |
۱۱ | SelectedCellsChanged زمانی که مجموعه SelectedCells تغییر کند، رخ می دهد. |
۱۲ | Sorting زمانی که عملیات مرتب سازی یک ستون آغاز می شود، رخ می دهد. |
مثال
یک پروژه WPF با نام WPFDataGridControl ایجاد کنید و سپس یک کنترل DataGrid را به پنجره اصلی برنامه اضافه کرده و مقادیر را مانند نمونه زیر تنظیم کنید. کد XAML مربوط به مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <Window x:Class = "WPFDataGridControl.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:core = "clr-namespace:System;assembly = mscorlib" xmlns:local = "clr-namespace:WPFDataGridControl" Title = "MainWindow" Height = "350" Width = "525"> <Window.Resources> <ObjectDataProvider x:Key = "myEnum" MethodName = "GetValues" ObjectType = "{x:Type core:Enum}"> <ObjectDataProvider.MethodParameters> <x:TypeExtension Type = "local:Party" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources> <Grid> <DataGrid Name = "dataGrid" AlternatingRowBackground = "LightBlue" AlternationCount = "2" AutoGenerateColumns = "False"> <DataGrid.Columns> <DataGridTextColumn Header = "Name" Binding = "{Binding Name}" /> <DataGridTextColumn Header = "Title" Binding = "{Binding Title}" /> <DataGridCheckBoxColumn Header = "ReElected?" Binding = "{Binding WasReElected}"/> <DataGridComboBoxColumn Header = "Party" SelectedItemBinding = "{Binding Affiliation}" ItemsSource = "{Binding Source = {StaticResource myEnum}}" /> </DataGrid.Columns> </DataGrid> </Grid> </Window> |
کد سی شارپ مربوط به مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WPFDataGridControl { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); dataGrid.ItemsSource = Employee.GetEmployees(); } } public enum Party { Indepentent, Federalist, DemocratRepublican, } public class Employee : INotifyPropertyChanged { private string name; public string Name { get { return name; } set { name = value; RaiseProperChanged(); } } private string title; public string Title { get { return title; } set { title = value; RaiseProperChanged(); } } private bool wasReElected; public bool WasReElected { get { return wasReElected; } set { wasReElected = value; RaiseProperChanged(); } } private Party affiliation; public Party Affiliation { get { return affiliation; } set { affiliation = value; RaiseProperChanged(); } } public static ObservableCollection<Employee> GetEmployees() { var employees = new ObservableCollection<Employee>(); employees.Add(new Employee() { Name = "Ali", Title = "Minister", WasReElected = true, Affiliation = Party.Indepentent }); employees.Add(new Employee() { Name = "Ahmed", Title = "CM", WasReElected = false, Affiliation = Party.Federalist }); employees.Add(new Employee() { Name = "Amjad", Title = "PM", WasReElected = true, Affiliation = Party.DemocratRepublican }); employees.Add(new Employee() { Name = "Waqas", Title = "Minister", WasReElected = false, Affiliation = Party.Indepentent }); employees.Add(new Employee() { Name = "Bilal", Title = "Minister", WasReElected = true, Affiliation = Party.Federalist }); employees.Add(new Employee() { Name = "Waqar", Title = "Minister", WasReElected = false, Affiliation = Party.DemocratRepublican }); return employees; } public event PropertyChangedEventHandler PropertyChanged; private void RaiseProperChanged([CallerMemberName] string caller = "") { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(caller)); } } } } |
زمانی که پروژه فوق را کامپایل و اجرا کنید، خروجی زیر را تولید خواهد کرد:
سلام خسته نباشید میشه توضیح بدین چطور بدون مقدار اولیه عین ویندوز فرم بشه از دیتا گرید در wpf استفاده کرد