我使用Blazor Server和Syncfusion网格(SfGrid(在页面上的多个网格中显示信息。
我的问题是,在访问@ref属性中引用的网格并使用网格.CurrentViewData方法后,生成的网格对象为null。
=====示例工作流======
用户通过使用每个网格的复选框列来指示要保存的项目。
当我在保存例程中获取网格时,为了检查检查了哪些行,网格总是空的。
这是我的密码。
@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