#c# #blazor
#c# #blazor
Вопрос:
Я сдаюсь, чтобы решить это. я не знаю, что не так с моим кодом, если проблема заключается в экземпляре object, я попытался предоставить моему классу разбиения на страницы экземпляр, но по-прежнему без подсказки.
Это мой индексный класс;
<DataGridComponent TItem="Employee"
DataItems="listEmployee"
Columns="columnDefinitions"
Paging="@(new PagingConfig {
Enabled = true,
CustomPager = true,
PageSize = 3
})">
<CustomPager>
<button class="btn btn-primary" @onclick="PrevPage"> Prev </button>
<span>amp;nbsp; amp;nbsp; Page
<input type="number" min="1"@bind-value="@DataGrid.currentPageNumber"/>
of @DataGrid.MaxPageNumber amp;nbsp; amp;nbsp;</span>
<button class="btn btn-primary" @onclick="NextPage"> Next </button>
</CustomPager>
</DataGridComponent>
@code{
private DataGridComponent<Employee> DataGrid;
private List<Employee> listEmployee;
private List<ColumnDefinition> columnDefinitions;
protected override void OnInitialized()
{
base.OnInitialized();
Initialize();
}
private void PrevPage()
{
DataGrid.GoToPrevPage();
}
private void NextPage()
{
DataGrid.GoToNextPage();
}
это мой класс DataGrid
<div class="level">
<div class="level-left"></div>
<div class="level-right">
<div class="level-item">
@if (Paging != null amp;amp; Paging.Enabled)
{
@if (Paging.CustomPager)
{
@CustomPager
}
else
{
<span @onclick="GoToPrevPage"><b>amp;<</b>Prev</span>
<span>amp;nbsp; amp;nbsp; @currentPageNumber of @Paging.MaxPageNumber(DataItems.Count)
amp;nbsp; amp;nbsp;</span>
<span @onclick="GoToNextPage"><b>Nextamp;></b></span>
}
}
</div>
</div>
</div>
@code {
[Parameter]
public int currentPageNumber { get; set; } = 1;
[Parameter]
public List<TItem> DataItems { get; set; }
[Parameter]
public List<ColumnDefinition> Columns { get; set; }
[Parameter]
public PagingConfig Paging { get; set; } = new PagingConfig();
[Parameter]
public RenderFragment CustomPager { get; set; }
public void GoToPrevPage()
{
currentPageNumber = Paging.PrevPageNumber(currentPageNumber);
}
public void GoToNextPage()
{
currentPageNumber = Paging.NextPageNumber(currentPageNumber, DataItems.Count);
}
public int MaxPageNumber { get => Paging.MaxPageNumber(DataItems.Count); }
}
и это мой мой pagingconfig
public class PagingConfig
{
public bool Enabled { get; set; }
public int PageSize { get; set; }
public bool CustomPager { get; set; }
public int NumOfItemsToSkip(int pageNumber)
{
if (Enabled)
{
return (pageNumber - 1) * PageSize;
}
else
return 0;
}
public int NumOfItemsToTake(int totalItemCount)
{
if (Enabled)
{
return PageSize;
}
return totalItemCount;
}
public int PrevPageNumber(int currentPageNumber)
{
if (currentPageNumber > 1)
return currentPageNumber - 1;
else
return 1;
}
public int NextPageNumber(int currentPageNumber, int totalItemsCount)
{
if (currentPageNumber < MaxPageNumber(totalItemsCount))
{
return currentPageNumber 1;
}
else
{
return currentPageNumber;
}
}
public int MaxPageNumber(int totalItemcount)
{
int maxPageNumber;
double numberOfPage = (double)totalItemcount / (double)PageSize;
if (numberOfPage == Math.Floor(numberOfPage))
{
maxPageNumber = (int)numberOfPage;
}
else
{
maxPageNumber = (int)numberOfPage 1;
}
return maxPageNumber;
}
}
}
проблема в том, что когда я попытался установить значение enabled в true, конфигурация разбиения на страницы должна получить значение true из index. Но сказано, что объект экземпляра еще не установлен. я попытался вставить новый экземпляр разбиения на страницы в компонент grid, но по-прежнему без подсказки: (
Ответ №1:
Необходимо назначить DataGrid. Я думаю, вы этого хотите:
<DataGridComponent @ref="DataGrid" TItem="Employee" ...>
...
</DataGridComponent>
ссылка на переменную в этой строке:
private DataGridComponent<Employee> DataGrid;
Ответ №2:
Это просто @ref=»DataGrid» отсутствует в разметке вашего DataGridComponent. Следовательно, ваша частная переменная DataGrid равна null.
Ответ №3:
В Index.razor вы настраиваете DataGridComponent
экземпляр в Razor, а затем объявляете другой в разделе кода private DataGridComponent<Employee> DataGrid
. Это два несвязанных экземпляра DataGridComponent
. Чтобы ссылаться DataGrid
на вашу объявленную версию razor, вам нужно использовать @ref
, как показано ниже.
<DataGridComponent TItem="Employee"
DataItems="listEmployee"
Columns="columnDefinitions"
@ref = "this.DataGrid"
Paging="@(new PagingConfig {
Enabled = true,
CustomPager = true,
PageSize = 3
})">