نصب و آموزش کامپوننت نمایش درختی Zeon Blazor TreeView
نحوه اضافه کردن کامپوننت (TreeView)
اضافه کردن فضای نام (در صفحه مورد نظر کد زیر را به Using ها اضافه کنید)
YourPage.razor
@using Zeon.Blazor.ZTreeView
اضافه کردن نمایش درختی (TreeView)
در صفحه و تگ مورد نظر خود جهت اضافه کردن نمایش درختی کد زیر را استفاده کنید
YourPage.razor
<ZTreeView TValue="ProductCategory" Name="tree-view-ProductCategory" DataSource="_productCategories" ></ZTreeView>
پارامتر ها (parameters)
نام پارامتر | نوع پارامتر | مقدار پیشفرض | اجباری | توضیحات |
---|---|---|---|---|
TValue | Generic Type | بله | نوع مدل دیتا سورس Data Source Model Type | |
Name | string | TreeView1 | بله | نام کامپوننت که در هر صفحه باید یونیک باشد |
DataSource | IEnumerable<TValue> | بله | لیستی از نوع TValue جهت نمایش درخت | |
AutoCheckChildren | bool | true | خیر | چک کردن فرزندان به صورت خودکار |
FieldsMapSettings | FieldsMapSettings? | null | خیر | تنظیم فیلد ها اجباری با نام های متفاوت از مقادیر پیشفرض کامپوننت جهت مپ کردن دیتا |
ShowCheckedBox | bool | true | خیر | نمایش چک باکس ها جهت چک زدن آیتم ها |
ShowActionButtons | bool | (add:false, edit:false,remove: false) | خیر | تنظیم نمایش دکمه های اضافه - ویرایش و حذف آیتم |
AddItemEvent | EventCallback<(int parentId, string value)> | خیر | رویداد اضافه کردن آیتم جدید | |
EditItemEvent | EventCallback<(int id, string newValue)> | خیر | رویداد ویرایش متن نمایشی آیتم | |
RemoveItemEvent | EventCallback<int> | خیر | رویداد حذف آیتم | |
DragAndDropIsEnabled | bool | false | خیر | تنظیم قابلیت کشیدن و رها کردن جهت تغییر پدر آیتم و مرتب سازی آیتم ها |
OnReorderEvent | EventCallback<ReorderTree> | خیر | رویداد تغییر مرتب سازی و پدر آیتم | |
BackgroundColor | string | whiteSmoke | خیر | رنگ پس زمینه |
توابع / پراپرتی (functions And Property)
نام | نوع | توضیحات |
---|---|---|
GetCheckedItems | int[] | دریافت لیست شناسه آیتم های چک شده |
GetExpandedItems | int[] | دریافت لیست شناسه آیتم های منبسط شده |
SetCheckedItems | void | تنظیم آیتم هایی که باید به وضعیت چک تغییر کنند |
SetExpandedItems | void | تنظیم آیتم هایی که باید به وضعیت منبسط تغییر کنند |
GetData | string | دریافت json دیتا تنظیم شده به همراه تغییرات |
SetFilter | void | ارسال فیلتر مورد نظر با نوع Func<TValue, bool>? جهت جستجو یا فیلتر درخت |
ReloadDataSource | void | بارگذاری مجدد دیتا |
SelectedId | int | پراپرتی دریافت یا تنظیم آیتم انتخاب شده |
نمایشگاه و نمونه کد (Samples)
حالت نمایش ساده و تک انتخابی
Output Preview
- دسته اصلی
- نوشیدنی
- لبنیات
- بهداشتی
Code
<div class="row" style="font-size:small"> <div class="col-auto p-1"> <ZTreeView TValue="ProductCategory" Name="tree-view-ProductCategory1" DataSource="_productCategories" ShowCheckedBox="false"></ZTreeView> </div> <div class="col-auto p-1"> </div> <div class="col-auto p-1"> </div> </div> @code { List<ProductCategory> _productCategories = new(); protected override void OnInitialized() { var data = new List<ProductCategory>() { new ProductCategory() { Id = 1, Text = "دسته اصلی" , Expanded=true }, new ProductCategory() { Id = 2, ParentId = 1, Text = "نوشیدنی" }, new ProductCategory() { Id = 3, ParentId = 1, Text = "لبنیات" }, new ProductCategory() { Id = 4, ParentId = 1, Text = "بهداشتی" }, new ProductCategory() { Id = 5, ParentId = 2, Text = "نوشابه" }, new ProductCategory() { Id = 6, ParentId = 2, Text = "آبمیوه" }, new ProductCategory() { Id = 7, ParentId = 2, Text = "دوغ" }, new ProductCategory() { Id = 8, ParentId = 5, Text = "کوکاکولا" }, new ProductCategory() { Id = 9, ParentId = 5, Text = "پپسی" }, new ProductCategory() { Id = 10, ParentId = 3, Text = "ماست" }, new ProductCategory() { Id = 11, ParentId = 3, Text = "شیر" }, new ProductCategory() { Id = 12, ParentId = 4, Text = "صابون" }, new ProductCategory() { Id = 13, ParentId = 4, Text = "مایع دستشویی" }, new ProductCategory() { Id = 14, ParentId = 4, Text = "مسواک" }, new ProductCategory() { Id = 15, ParentId = 4, Text = "خمیردندان", } }; _productCategories.AddRange(data); base.OnInitialized(); } public class ProductCategory { public int Id { get; set; } public int? ParentId { get; set; } public string Text { get; set; } = string.Empty; public bool IsChecked { get; set; } public bool Expanded { get; set; } } }
حالت نمایش با چک باکس و فیلتر
Output Preview
- دسته اصلی
- نوشیدنی
- لبنیات
- بهداشتی
Code
<div class="row" style="font-size:small"> <div class="col-auto p-1" style="background-color: whitesmoke;border-radius: 8px;padding: 10px;"> <Zeon.Blazor.ZInputContainer.ZInputContainer TModel="string" For="جستجو" CssIcon="fa fa-search" Display="block"> <Zeon.Blazor.ZInput.ZInput Type="string" OnValueChanged="FilterTreeData"></Zeon.Blazor.ZInput.ZInput> </Zeon.Blazor.ZInputContainer.ZInputContainer> <ZTreeView @ref="RefTreeView" TValue="ProductCategory" Name="tree-view-ProductCategory2" DataSource="_productCategories" BackgroundColor="#90ffc7"></ZTreeView> </div> <div class="col-auto p-1"> </div> <div class="col-auto p-1"> </div> </div> @code { List<ProductCategory> _productCategories = new(); public ZTreeView<ProductCategory> RefTreeView { get; set; } = null!; protected override void OnInitialized() { var data = new List<ProductCategory>() { new ProductCategory() { Id = 1, Text = "دسته اصلی" , Expanded=true }, new ProductCategory() { Id = 2, ParentId = 1, Text = "نوشیدنی" }, new ProductCategory() { Id = 3, ParentId = 1, Text = "لبنیات" }, new ProductCategory() { Id = 4, ParentId = 1, Text = "بهداشتی" }, new ProductCategory() { Id = 5, ParentId = 2, Text = "نوشابه" }, new ProductCategory() { Id = 6, ParentId = 2, Text = "آبمیوه" }, new ProductCategory() { Id = 7, ParentId = 2, Text = "دوغ" }, new ProductCategory() { Id = 8, ParentId = 5, Text = "کوکاکولا" }, new ProductCategory() { Id = 9, ParentId = 5, Text = "پپسی" }, new ProductCategory() { Id = 10, ParentId = 3, Text = "ماست" }, new ProductCategory() { Id = 11, ParentId = 3, Text = "شیر" }, new ProductCategory() { Id = 12, ParentId = 4, Text = "صابون" }, new ProductCategory() { Id = 13, ParentId = 4, Text = "مایع دستشویی" }, new ProductCategory() { Id = 14, ParentId = 4, Text = "مسواک" }, new ProductCategory() { Id = 15, ParentId = 4, Text = "خمیردندان", } }; _productCategories.AddRange(data); base.OnInitialized(); } private void FilterTreeData(string value) { Func<ProductCategory, bool>? filter = null; if (!string.IsNullOrEmpty(value)) { filter = q => q.Text.Contains(value); RefTreeView.SetFilter(filter); } else { RefTreeView.SetFilter(filter); } } public class ProductCategory { public int Id { get; set; } public int? ParentId { get; set; } public string Text { get; set; } = string.Empty; public bool IsChecked { get; set; } public bool Expanded { get; set; } } }
مپ کردن دیتا با فیلد های با نام های متفاوت
Output Preview
- دسته اصلی
- نوشیدنی
- لبنیات
- بهداشتی
Code
<div class="row" style="font-size:small"> <div class="col-auto p-1"> <ZTreeView @ref="RefTreeView2" TValue="ProductCategory2" Name="tree-view-ProductCategory3" DataSource="_productCategories2" FieldsMapSettings="_mapperSetting" ></ZTreeView> </div> <div class="col-auto p-1"> </div> <div class="col-auto p-1"> </div> </div> @code { List<ProductCategory2> _productCategories2 = new(); public ZTreeView<ProductCategory> RefTreeView2 { get; set; } = null!; Zeon.Blazor.ZTreeView.FieldsMapSettings _mapperSetting = new FieldsMapSettings { Text = "Name", ParentId = "PId" }; protected override void OnInitialized() { var data2 = new List<ProductCategory2>() { new ProductCategory2() { Id = 1, Name = "دسته اصلی" , Expanded = true }, new ProductCategory2() { Id = 2, PId = 1, Name = "نوشیدنی" }, new ProductCategory2() { Id = 3, PId = 1, Name = "لبنیات" }, new ProductCategory2() { Id = 4, PId = 1, Name = "بهداشتی" }, new ProductCategory2() { Id = 5, PId = 2, Name = "نوشابه" }, new ProductCategory2() { Id = 6, PId = 2, Name = "آبمیوه" }, new ProductCategory2() { Id = 7, PId = 2, Name = "دوغ" }, new ProductCategory2() { Id = 8, PId = 5, Name = "کوکاکولا" }, new ProductCategory2() { Id = 9, PId = 5, Name = "پپسی" }, new ProductCategory2() { Id = 10, PId = 3, Name = "ماست" }, new ProductCategory2() { Id = 11, PId = 3, Name = "شیر" }, new ProductCategory2() { Id = 12, PId = 4, Name = "صابون" }, new ProductCategory2() { Id = 13, PId = 4, Name = "مایع دستشویی" }, new ProductCategory2() { Id = 14, PId = 4, Name = "مسواک" }, new ProductCategory2() { Id = 15, PId = 4, Name = "خمیردندان", } }; _productCategories2.AddRange(data2); base.OnInitialized(); } public class ProductCategory2 { public int Id { get; set; } public int? PId { get; set; } public string Name { get; set; } = string.Empty; public bool IsChecked { get; set; } public bool Expanded { get; set; } } }
فعال کردن drag and drop و نمایش دکمه های اضافه - ویرایش و حذف آیتم
Output Preview
- دسته اصلی
- نوشیدنی
- لبنیات
- بهداشتی
Code
<div class="row" style="font-size:small"> <div class="col-auto p-1"> <ZTreeView @ref="RefTreeView3" TValue="ProductCategory2" Name="tree-view-ProductCategory4" FieldsMapSettings="_mapperSetting" DataSource="_productCategories2" ShowActionButtons="(add:true,edit:true,remove:true)" DragAndDropIsEnabled="true" AddItemEvent="AddItemEvent" EditItemEvent="EditItemEvent" RemoveItemEvent="RemoveItemEvent" OnReorderEvent="ReorderTreeEvent"></ZTreeView> </div> <div class="col-auto p-1"> </div> <div class="col-auto p-1"> </div> </div> @code { List<ProductCategory2> _productCategories2 = new(); public ZTreeView<ProductCategory> RefTreeView3 { get; set; } = null!; Zeon.Blazor.ZTreeView.FieldsMapSettings _mapperSetting = new FieldsMapSettings { Text = "Name", ParentId = "PId" }; protected override void OnInitialized() { var data2 = new List<ProductCategory2>() { new ProductCategory2() { Id = 1, Name = "دسته اصلی" , Expanded = true }, new ProductCategory2() { Id = 2, PId = 1, Name = "نوشیدنی" }, new ProductCategory2() { Id = 3, PId = 1, Name = "لبنیات" }, new ProductCategory2() { Id = 4, PId = 1, Name = "بهداشتی" }, new ProductCategory2() { Id = 5, PId = 2, Name = "نوشابه" }, new ProductCategory2() { Id = 6, PId = 2, Name = "آبمیوه" }, new ProductCategory2() { Id = 7, PId = 2, Name = "دوغ" }, new ProductCategory2() { Id = 8, PId = 5, Name = "کوکاکولا" }, new ProductCategory2() { Id = 9, PId = 5, Name = "پپسی" }, new ProductCategory2() { Id = 10, PId = 3, Name = "ماست" }, new ProductCategory2() { Id = 11, PId = 3, Name = "شیر" }, new ProductCategory2() { Id = 12, PId = 4, Name = "صابون" }, new ProductCategory2() { Id = 13, PId = 4, Name = "مایع دستشویی" }, new ProductCategory2() { Id = 14, PId = 4, Name = "مسواک" }, new ProductCategory2() { Id = 15, PId = 4, Name = "خمیردندان", } }; _productCategories2.AddRange(data2); base.OnInitialized(); } private void ReorderTreeEvent(ReorderTree reorderTree) { } private void EditItemEvent((int id, string newValue) parameters) { _productCategories2.First(q => q.Id == parameters.id).Name = parameters.newValue; RefTreeView3.ReloadDataSource(); } private void AddItemEvent((int id, string value) parameters) { var item = new ProductCategory2() { Id = _productCategories2.Max(q => q.Id) + 1, PId = parameters.id, Name = parameters.value, Expanded = false, IsChecked = false, }; _productCategories2.Add(item); RefTreeView3.ReloadDataSource(); } private void RemoveItemEvent(int id) { var item = _productCategories2.First(q => q.Id == id); _productCategories2.Remove(item); RefTreeView3.ReloadDataSource(); } public class ProductCategory2 { public int Id { get; set; } public int? PId { get; set; } public string Name { get; set; } = string.Empty; public bool IsChecked { get; set; } public bool Expanded { get; set; } } }