Blazor Syncfusion 网格:Grid.CurrentViewData 方法总是 returns null

Blazor Syncfusion Grids: The Grid.CurrentViewData method always returns null

我正在使用 Blazor Server 和 Syncfusion 网格 (SfGrid) 在页面上的多个网格中显示信息。

我的问题是在访问@ref 属性中引用的网格并使用 grid.CurrentViewData 方法后,生成的网格对象为空。

=====示例工作流程======

用户使用每个网格的复选框列指示要保存的项目。

当我在保存例程中抓取网格时,要检查哪些行被选中,网格始终为空。

这是我的代码。

@foreach(var item in items_to_display) 
    <SfGrid @ref=get_mygrid(item.name) DataSource="@Items" AllowTextWrap="true"  
                        AllowSorting ="false" AllowFiltering="false" AllowPaging="true" Width="100%" 
                        EnableAltRow="true" > 
                    <GridTextWrapSettings WrapMode="WrapMode.Content"></GridTextWrapSettings> 
                    <GridPageSettings PageSize=10></GridPageSettings>
                    <GridSelectionSettings  CheckboxMode="CheckboxSelectionType.ResetOnRowClick" 
                                CheckboxOnly="false" PersistSelection="true"></GridSelectionSettings>
                    <GridEvents TValue="Item" OnActionFailure="@ActionFailure"></GridEvents>
                    <GridColumns>
                        <GridColumn Field=@nameof(Item.Selected) Width="10px" >
                            <Template>
                                @{
                                    var item = (context as Item);
                                    <SfCheckBox Checked="item?.Selected"></SfCheckBox>
                                }
                            </Template>
                        </GridColumn>
                        <GridColumn Width="30px" Field=@nameof(Item.Group) HeaderText="Section"></GridColumn>
                        <GridColumn Width="10px" Field=@nameof(Item.ItemName) HeaderText="ITEM"></GridColumn>
                        <GridColumn Width="120px" Field=@nameof(Item.Description)  HeaderText="DESCRIPTION"> </GridColumn> 
                    </GridColumns>
                </SfGrid> 
     

我的网格对象在网格中的@ref 属性中使用...

private Dictionary<string, SfGrid<Items>> myGrids = new Dictionary<string, SfGrid<Items>>();
public SfGrid<Items> get_mygrid(string gridName)
{ 
    if (!(myGrids.Keys.Contains(gridName)) )
        myGrids.Add(gridName, new SfGrid<Item>()); 
    return myGrids[gridName];
}

我使用以下代码尝试访问网格,但它始终为空。

foreach(var gridkey in myGrids.Keys)
{ 
    var grid = myGrids[gridkey].CurrentViewData as IEnumerable<object>;
    //=========grid is null here ===================
 }

您可以在渲染时直接将字典项用于引用,而不是使用方法。我们直接修改了示例以访问 mygrid 变量。请检查随附的代码片段和示例以供参考。

<SfButton OnClick="clicked" Content="Click"></SfButton>

@foreach (var d in Data)

{

    <SfGrid DataSource="@Orders" @ref="myGrids[d]" AllowTextWrap="true" AllowSorting ="false" AllowFiltering="false" AllowPaging="true" Width="100%" EnableAltRow="true">

        <GridTextWrapSettings WrapMode="WrapMode.Content"></GridTextWrapSettings>

        <GridPageSettings PageSize=10></GridPageSettings>

        <GridColumns>

        </GridColumns>

    </SfGrid>

}

 

@code {

    public List<Order> Orders { get; set; }

    public List<string> Data = new List<string>() { "First", "second" };

    private Dictionary<string, SfGrid<Order>> myGrids = new Dictionary<string, SfGrid<Order>>();

 

    public void clicked()

    {

        foreach (var gridkey in myGrids.Keys)

        {

            var grid = myGrids[gridkey].CurrentViewData as IEnumerable<object>;

        }

    }

 

}

样本:https://www.syncfusion.com/downloads/support/directtrac/general/ze/DataGrid362229114.zip