2017-07-26 34 views
1

dothtml表DataPager的:DotVVM DataPager的工作不

<bp:GridView DataSource="{value: UserRoleGroupListDTOs}" class="table table-bordered table-hover dataTable"> 
       <Columns> 
        <%--<dot:GridViewTextColumn ValueBinding="{value: Name}" HeaderText="Název" Events.Click="{command: GoToDetail() }"/>--%> 
        <bp:GridViewTemplateColumn HeaderText="{resource: eCENTRE.Common.Resources.Admin.Common.Name}"> 
         <dot:RouteLink Text="{value: Name}" RouteName="UserRoleGroupDetail" Param-Id="{value: Id}" /> 
        </bp:GridViewTemplateColumn> 
        <bp:GridViewCheckBoxColumn ValueBinding="{value: IsBlocked}" HeaderText="{resource: eCENTRE.Common.Resources.Admin.Common.Forbidden}" IsEditable="true"/> 
        <bp:GridViewTemplateColumn HeaderText="{resource: eCENTRE.Common.Resources.Admin.Common.Delete}" CssClass="align center"> 
         <%--<i class="glyphicon glyphicon-remove remove-from-list" style="color:red;"> 
         </i>--%> 
         <dot:Button class="btn btn-default" Click="{command: _parent.DeleteUserRoleGroup(Id)}" Text="{resource: eCENTRE.Common.Resources.Admin.Common.Delete}"/> 

        </bp:GridViewTemplateColumn> 
       </Columns> 

      </bp:GridView> 
      <bp:DataPager DataSet="{value: UserRoleGroupListDTOs}"/> 

視圖模型和初始化函數預渲染:

public GridViewDataSet<UserRoleGroupListDTO> UserRoleGroupListDTOs { get; set; } 

    private readonly IUserRoleGroupFacade userRoleGroupDetailFacade; 
    private readonly UserRoleGroupCrudFacade crudFacade; 

    public UserRoleGroupListViewModel(IUserRoleGroupFacade userRoleGroupDetailFacade, UserRoleGroupCrudFacade crudFacade) 
    { 
     this.userRoleGroupDetailFacade = userRoleGroupDetailFacade; 
     this.crudFacade = crudFacade; 
    } 

    public override Task Init() 
    { 
     return base.Init(); 
    } 
    public override Task PreRender() 
    { 
     UserRoleGroupListDTOs = new GridViewDataSet<UserRoleGroupListDTO>(); 
     UserRoleGroupListDTOs.PagingOptions.PageSize = 10; 
     UserRoleGroupListDTOs.SortingOptions.SortDescending = true; 
     UserRoleGroupListDTOs.SortingOptions.SortExpression = nameof(UserRoleGroupListDTO.Name); 
     UserRoleGroupListDTOs.OnLoadingData = options => Task.Run(() => userRoleGroupDetailFacade.GetUserRoleGroupGridViewDataSetLoadedData(options)).Result; 

     return base.PreRender(); 
    } 

傳呼機做節目,但點擊任意按鈕後,什麼都沒發生。

如果我將初始化添加到Init方法,pager工作,但viewModel有另一個錯誤。

回答

1

正如托馬斯寫的,你創建了數據集的新實例,所以你失去了PagingOptions。

您必須僅在新請求中初始化數據集,而不是在回發中。

public override Task Init() 
{ 
    if (!Context.IsPostBack) 
    { 
     UserRoleGroupListDTOs = new GridViewDataSet<UserRoleGroupListDTO> 
     { 
      PagingOptions = { PageSize = 10 }, 
      SortingOptions = 
      { 
       SortDescending = true, 
       SortExpression = nameof(UserRoleGroupListDTO.Name) 
      }, 
     }; 
    } 
    return base.Init(); 
} 

然後,你必須設置delagate OnLoadingData負載或在PreRender

public override Task PreRender() 
{ 
    UserRoleGroupListDTOs.OnLoadingData = 
     options => Task.Run(() => userRoleGroupDetailFacade.GetUserRoleGroupGridViewDataSetLoadedData(options)).Result; 
    return base.PreRender(); 
} 
+0

執行命令綁定,這是要刪除實體後,實體表仍顯示。 看起來像數據將不會在Prerender中重新加載。 –

+0

GetUserRoleGroupGridViewDataSetLoadedData在PreRender之後調用,所以應該有另一個錯誤。你的命令是怎樣的? – Marv

+1

在命令中你應該使用UserRoleGroupListDTOs.RequestRefresh(true); – Marv

0

您需要初始化Init階段的尋呼機。 PreRender事件發生在處理頁面的命令後。你基本上用最初的一個覆蓋數據集。

請參閱ViewModels Documentation中的圖表。