微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用下拉列表作为Blazorise.DataGrid的过滤器

如何解决使用下拉列表作为Blazorise.DataGrid的过滤器

我开始用C#开发Web应用程序,并决定从Blazor开始。
现成的Blazorise DataGrid支持文本框过滤器。
我想使用一个下拉组件来允许按特定值进行过滤。
我该怎么做才能使网格对Select值的更改做出反应?
代码示例:

@page "/ItemList"
@using DataAccessLibrary
@using Blazorise
@using Blazorise.DataGrid

@inject IItemList _items;

<div align="center">
    <h3>Item List</h3>
</div>
@if (ItemListItems is null)
{
    <p>Loading...</p>
}
else
{
<DataGrid Data="@ItemListItems" TItem="ItemListItem" PageSize="20" ShowPager="true" Filterable="true" Striped="true" Narrow="true" @bind-SelectedRow="@selectedItem">
    <EmptyTemplate>
        <div class="Box">
            No items were found!
        </div>
    </EmptyTemplate>
    <DataGridColumns>
        <DataGridCommandColumn TItem="ItemListItem" Caption="Action" EditCommandAllowed="true">
            <EditCommandTemplate>
                <Button Color="Color.Primary" Clicked="@context.Clicked">Edit</Button>
            </EditCommandTemplate>
        </DataGridCommandColumn>
        <DataGridNumericColumn TItem="ItemListItem" Field="@nameof(ItemListItem.ItemID)" Caption="Item ID" Sortable="true" TextAlignment="TextAlignment.Right">
            <displayTemplate>
                <a href="ItemDetails/?Itemid=@(context.ItemID)">@(context.ItemID)</a>
            </displayTemplate>
        </DataGridNumericColumn>
        <DataGridSelectColumn TItem="ItemListItem" Field="@nameof(ItemListItem.TypeShortDesc)" Caption="Item Type" Sortable="true">
            // This filter should replace the default textBox with a dropdown listing only specific values
            <FilterTemplate>
                <Select TValue="string" @bind-SelectedValue="@ItemTypeFilter">
                    @foreach (string type in ItemTypeList)
                    {
                        <SelectItem Value="@type">@type</SelectItem>
                    }
                </Select>
            </FilterTemplate>
        </DataGridSelectColumn>
        <DataGridSelectColumn TItem="ItemListItem" Field="@nameof(ItemListItem.Description)" Caption="Item Description" Sortable="true" TextAlignment="TextAlignment.Left" />
        <DataGridSelectColumn TItem="ItemListItem" Field="@nameof(ItemListItem.StatusShortDesc)" Caption="Status" Sortable="true">
            <FilterTemplate>
            // This filter should replace the default textBox with a dropdown listing only specific values
                <Select TValue="string" @bind-SelectedValue="@ItemStatusFilter">
                    @foreach(string status in ItemStatusList)
                    {
                        <SelectItem Value="@status">@status</SelectItem>
                    }
                </Select>
            </FilterTemplate>
        </DataGridSelectColumn>
        <DataGridNumericColumn TItem="ItemListItem" Field="@nameof(ItemListItem.ItemPrice)" Caption="Amount" Sortable="false" TextAlignment="TextAlignment.Right" displayFormat="{0:C}" />
    </DataGridColumns>
</DataGrid>
}

@code {
    private List<ItemListItem> ItemListItems;
    private ItemListItem selectedItem;

    private List<string> ItemStatusList;
    private string ItemStatusFilter;
    private List<string> ItemTypeList;
    private string ItemTypeFilter;

    protected override async Task OnInitializedAsync()
    {
        ItemListItems = await _items.GetItems();
        ItemTypeList = await _items.GetItemTypes();
        ItemStatusList = await _items.GetItemStatuses();
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。