繁体   English   中英

我该如何解决“对象引用未设置为 object 的实例。” 在 blazor 中?

[英]how can i solve 'Object reference not set to an instance of an object.' in blazor?

我放弃解决这个问题。 我不知道我的代码有什么问题,如果问题是 object 的实例,我试图给我的分页 class 一个实例,但仍然没有线索。

这是我的索引 class;

 <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>&nbsp; &nbsp; Page 
         <input type="number"  min="1"@bind-value="@DataGrid.currentPageNumber"/> 
         of @DataGrid.MaxPageNumber &nbsp; &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();
}

这是我的数据网格 class

 <div class="level">
     <div class="level-left"></div>
     <div class="level-right">
      <div class="level-item">
        @if (Paging != null && Paging.Enabled)
        {
            @if (Paging.CustomPager)
            {
                @CustomPager
            }
            else
            {
                <span @onclick="GoToPrevPage"><b>&lt;</b>Prev</span>
                <span>&nbsp; &nbsp; @currentPageNumber of @Paging.MaxPageNumber(DataItems.Count) 
               &nbsp; &nbsp;</span>
                <span @onclick="GoToNextPage"><b>Next&gt;</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); }
}

这是我的分页配置

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;
    }
   }
  }

问题是,当我尝试将启用设置为 true 时,分页配置应该从索引中获取 true 的值。 但据说还没有设置实例 object。 我试图将新的分页实例放入网格组件但仍然没有线索:(

需要分配 DataGrid。 我想你想要这个:

<DataGridComponent @ref="DataGrid" TItem="Employee" ...>
   ...
</DataGridComponent>

引用是对这一行中的变量:

private DataGridComponent<Employee> DataGrid;

只是 DataGridComponent 的标记中缺少 @ref="DataGrid"。 因此,您的私有 DataGrid 变量是 null。

在 Index.razor 中,您在 Razor 中设置了一个DataGridComponent实例,然后在代码部分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
                         })">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM