как я могу решить «Ссылка на объект, не установленная для экземпляра объекта». в blazor?

#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
                         })">