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
我正在使用 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