@code {
private Task DoubleClickRowCallback(BindItem item)
{
var cate = ToastCategory.Success;
var title = "双击行回调委托示例";
var content = $"选中行数据为名称 {item.Name} 的数据";
ToastService?.Show(new ToastOption()
{
Category = cate,
Title = title,
Content = content
});
return Task.CompletedTask;
}
private static readonly Random random = new Random();
///
///
///
///
protected static List GenerateItems() => new List(Enumerable.Range(1, 80).Select(i => new BindItem()
{
Id = i,
Name = $"张三 {i:d4}",
DateTime = DateTime.Now.AddDays(i - 1),
Address = $"上海市普陀区金沙江路 {random.Next(1000, 2000)} 弄",
Count = random.Next(1, 100),
Complete = random.Next(1, 100) > 50
}));
///
///
///
protected static IEnumerable Items { get; } = GenerateItems();
///
///
///
protected IEnumerable PageItemsSource => new int[] { 2, 4, 10, 20 };
///
///
///
///
///
protected Task> OnQueryAsync(QueryPageOptions options) => BindItemQueryAsync(Items, options);
///
///
///
///
protected Task CustomerButton(IEnumerable items)
{
var cate = ToastCategory.Information;
var title = "自定义按钮处理方法";
var content = $"通过不同的函数区分按钮处理逻辑,参数 Items 为 Table 组件中选中的行数据集合,当前选择数据 {items.Count()} 条";
ToastService?.Show(new ToastOption()
{
Category = cate,
Title = title,
Content = content
});
return Task.CompletedTask;
}
///
///
///
///
protected Task OnRowButtonClick(BindItem item)
{
var cate = ToastCategory.Success;
var title = "行内按钮处理方法";
var content = "通过不同的函数区分按钮处理逻辑,参数 Item 为当前行数据";
ToastService?.Show(new ToastOption()
{
Category = cate,
Title = title,
Content = content
});
return Task.CompletedTask;
}
///
///
///
///
///
///
protected Task> BindItemQueryAsync(IEnumerable items, QueryPageOptions options)
{
//TODO: 此处代码后期精简
if (!string.IsNullOrEmpty(SearchModel.Name)) items = items.Where(item => item.Name?.Contains(SearchModel.Name, StringComparison.OrdinalIgnoreCase) ?? false);
if (!string.IsNullOrEmpty(SearchModel.Address)) items = items.Where(item => item.Address?.Contains(SearchModel.Address, StringComparison.OrdinalIgnoreCase) ?? false);
if (!string.IsNullOrEmpty(options.SearchText)) items = items.Where(item => (item.Name?.Contains(options.SearchText) ?? false)
|| (item.Address?.Contains(options.SearchText) ?? false));
// 过滤
var isFiltered = false;
if (options.Filters.Any())
{
items = items.Where(options.Filters.GetFilterFunc());
// 通知内部已经过滤数据了
isFiltered = true;
}
// 排序
var isSorted = false;
if (!string.IsNullOrEmpty(options.SortName))
{
// 外部未进行排序,内部自动进行排序处理
var invoker = SortLambdaCache.GetOrAdd(typeof(BindItem), key => items.GetSortLambda().Compile());
items = invoker(items, options.SortName, options.SortOrder);
// 通知内部已经过滤数据了
isSorted = true;
}
// 设置记录总数
var total = items.Count();
// 内存分页
items = items.Skip((options.PageIndex - 1) * options.PageItems).Take(options.PageItems).ToList();
return Task.FromResult(new QueryData()
{
Items = items,
TotalCount = total,
IsSorted = isSorted,
IsFiltered = isFiltered,
IsSearch = !string.IsNullOrEmpty(SearchModel.Name) || !string.IsNullOrEmpty(SearchModel.Address)
});
}
}