نصب و آموزش کامپوننت نمایش درختی 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; }
}
}