Я пытаюсь представить 3-уровневую вложенную коллекцию в представлении MVC.
Вот мой код:
<table class="table table-hover" style="vertical-align: middle">
<tbody>
@*Accounts*@
@for (var counterAccount = 0; counterAccount < Model.RecordsToBeSubmitted.Count; counterAccount++)
{
var counterAccountSafe = counterAccount;
<tr>
<th scope="row">@Model.RecordsToBeSubmitted[counterAccountSafe].Account</th>
<td>
<table class="table">
<tbody>
@*Locations*@
@for (var counterLocation = 0; counterLocation < Model.RecordsToBeSubmitted[counterAccountSafe].Locations.Count; counterLocation++)
{
var counterLocationSafe = counterLocation;
<tr>
<td>@Model.RecordsToBeSubmitted[counterAccountSafe].Locations[counterLocationSafe].Location</td>
<td>
<table class="table">
<tbody>
@*Pay Modes*@
@for (var counterPayMode = 0; counterPayMode < Model.RecordsToBeSubmitted[counterAccountSafe].Locations[counterLocationSafe].PaymentModes.Count; counterPayMode++)
{
var counterPayModeSafe = counterPayMode;
<tr>
<td>@Model.RecordsToBeSubmitted[counterAccountSafe].Locations[counterLocationSafe].PaymentModes[counterPayModeSafe].PaymentMode</td>
<td>@Model.RecordsToBeSubmitted[counterAccountSafe].Locations[counterLocationSafe].PaymentModes[counterPayModeSafe].BillDetails.Count</td>
</tr>
}
</tbody>
</table>
</td>
</tr>
}
</tbody>
</table>
</td>
</tr>
}
</tbody>
</table>
Вот что отображается:
Это не презентабельно, но показывает, к чему я стремлюсь.У меня есть доступ к Kendo Pivot MVC, но мне не нужны дополнительные функции.Мне нужно только аккуратно отобразить эти данные в этой форме.Сейчас я не могу выровнять его из-за вложенности таблиц и не могу использовать заголовки таблиц
Модель (-ы):
public class GrpSummaryResult : IBdo
{
[DataMember]
public bool IsProcessable { get; set; }
[DataMember]
public int TotalBills { get; set; }
[DataMember]
public IList<GrpSummaryGroupAccount> Accounts { get; set; }
}
[DataContract(Namespace = Constants.BdoNamespace)]
public class GrpSummaryGroupAccount : IBdo
{
[DataMember]
public string Account { get; set; }
[DataMember]
public IList<GrpSummaryGroupLocation> Locations { get; set; }
}
[DataContract(Namespace = Constants.BdoNamespace)]
public class GrpSummaryGroupLocation : IBdo
{
[DataMember]
public int Location { get; set; }
[DataMember]
public IList<GrpSummaryGroupPaymentMode> PaymentModes { get; set; }
}
[DataContract(Namespace = Constants.BdoNamespace)]
public class GrpSummaryGroupPaymentMode : IBdo
{
[DataMember]
public int PaymentModeId { get; set; }
[DataMember]
public string PaymentMode { get; set; }
[DataMember]
public IList<BillInfoDetail> BillDetails { get; set; }
}
[DataContract(Namespace = Constants.BdoNamespace)]
public class BillInfoDetail : IBdo
{
[DataMember]
public string BillNumber { get; set; }
[DataMember]
public string ServiceName { get; set; }
[DataMember]
public decimal Fees { get; set; }
}
Обновление:
Я также ввел плоские данные, поскольку «коллекции в коллекции» (см. Выше) не работали для меня.
Модель плоских данных:
[DataContract(Namespace = Constants.BdoNamespace)]
public class BillInfoDetail : IBdo
{
[DataMember]
public string FocusReferenceNumber
{
get => $"{BillNumber}-{PaymentModeId}";
private set { }
}
...
[DataMember]
public BillInfo Bill { get; set; }
}
public class BillInfo : IBdo
{
[DataMember]
public string BillNumber { get; set; }
[DataMember]
public int PayModeId { get; set; }
[DataMember]
public int CashierId { get; set; }
[DataMember]
public string PayMode { get; set; }
[DataMember]
public string CustomerCode { get; set; }
[DataMember]
public string CustomerName { get; set; }
[DataMember]
public string AccountGroup { get; set; }
}
Код:
@(Html.Kendo().PivotConfigurator()
.Name("configurator")
.HtmlAttributes(new { @class = "hidden-on-narrow" })
.Filterable(true)
.Sortable()
.Height(580)
)
@(Html.Kendo().PivotGrid<DA.Systems.Focus.Business.BDO.BillInfoDetail>()
.Name("pivotGrid")
.HtmlAttributes(new { @class = "hidden-on-narrow" })
.Filterable(true)
.Configurator("#configurator")
.ColumnWidth(120)
.Height(570)
.BindTo(Model.FlatData)
.DataSource(dataSource => dataSource
.Ajax()
.Schema(schema => schema
.Model(m => m.Field("Account", typeof(string)).From("Bill.AccountGroup"))
.Model(m => m.Field("PaymentMode", typeof(string)).From("Bill.PayMode"))
.Cube(cube => cube
.Dimensions(dimensions =>
{
dimensions.Add("Account").Caption("Accounts");
dimensions.Add(model => model.CashierId).Caption("Location");
dimensions.Add("PaymentMode").Caption("Payment Modes");
})
.Measures(measures => {
measures.Add("Bills").Format("{0}").Field(model => model.FocusReferenceNumber).AggregateName("count");
})
))
.Columns(columns =>
{
columns.Add("Account").Expand(true);
columns.Add("PaymentMode");
})
.Measures(measures => measures.Values("Bills"))
.Events(e => e.Error("onError"))
)
)
Я попробовал MVC Kendo PivotGrid с плоскими данными:
Не нравится вообще.