TabOrder
TabOrder
TabOrder
このビューは、TabOrderの使用方法を示します。
機能
サンプル
| Customer Order | Customer Sale | |
|---|---|---|
| Country* | ||
| Product* | ||
| Price* | ||
| Date |
設定
説明
このサンプルは、コントロールにTabOrderを使用する方法を示します。デフォルト設定では、コントロールにTabOrderプロパティが表示されません。カスタマイズ設定は、各コントロールのTabOrderプロパティを指定します。タブオーダーは、コード内のインタラクティブ要素の順序に従わずに、コンテンツ内の関係に従います。
TabIndex属性値は、コントロールのホストHTML要素で指定することで、Wijmoコントロールに対して静的に定義できます。ただし、Wijmoコントロールは複雑な構造であり、コントロールが正しく機能できるように、属性値を内部要素に伝達する必要があるため、この値をアプリケーションのライフサイクルの後半で変更することはできません。
そのため、コントロールのtabindexを動的に読み取ったり変更したりするには、TabOrderプロパティを使用して行う必要があります。
ソース
IndexController.cs
using C1.Web.Mvc;
using C1.Web.Mvc.Serialization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using MvcExplorer.Models;
using System.Collections.Generic;
namespace MvcExplorer.Controllers
{
public partial class TabOrderController : Controller
{
private readonly ControlOptions _optionModel = new ControlOptions
{
Options = new OptionDictionary
{
{"Tab Order",new OptionItem{ Values = new List<string> { "Default", "Customized"}, CurrentValue = "Default"}}
}
};
public ActionResult Index(IFormCollection collection)
{
_optionModel.LoadPostData(collection);
ViewBag.DemoOptions = _optionModel;
return View();
}
public ActionResult GetCustomerOrder([C1JsonRequest] CollectionViewRequest<CustomerOrder> requestData)
{
return this.C1Json(CollectionViewHelper.Read(requestData, CustomerOrder.GetCountryGroupOrderData()));
}
public ActionResult GetCustomerSale([C1JsonRequest] CollectionViewRequest<Sale> requestData)
{
return this.C1Json(CollectionViewHelper.Read(requestData, CustomerSale.GetData(10)));
}
}
}
Index.cshtml
@{
ControlOptions optionsModel = ViewBag.DemoOptions;
ViewBag.DemoSettings = true;
string tabOrder = optionsModel.Options["Tab Order"].CurrentValue;
}
<div class="container-fluid">
<div class="row">
<div class="col-md-7 col-md-offset-2" style="text-align:center; max-width: 660px;">
@if (tabOrder == "Customized")
{
<table class="input-form">
<tr>
<th></th>
<th>Customer Order</th>
<th>Customer Sale</th>
</tr>
<tr>
<th>Country*</th>
<td>
<c1-combo-box id="orderCountry" is-required="true" tab-order="1">
<c1-items-source source-collection="@Countries.GetCountries()"></c1-items-source>
</c1-combo-box>
</td>
<td>
<c1-combo-box id="saleCountry" is-required="true" tab-order="5">
<c1-items-source source-collection="@Countries.GetCountries()"></c1-items-source>
</c1-combo-box>
</td>
</tr>
<tr>
<th>Product*</th>
<td>
<c1-combo-box id="orderProduct" is-required="true" tab-order="2">
<c1-items-source source-collection="@Products.GetProducts()"></c1-items-source>
</c1-combo-box>
</td>
<td>
<c1-combo-box id="saleProduct" is-required="true" tab-order="6">
<c1-items-source source-collection="@Products.GetProducts()"></c1-items-source>
</c1-combo-box>
</td>
</tr>
<tr>
<th>Price*</th>
<td>
<c1-input-number id="orderPrice" min="0" step="10" value="0" format="c0" is-required="true" tab-order="3">
</c1-input-number>
</td>
<td>
<c1-input-number id="salePrice" min="0" step="10" value="0" format="c0" is-required="true" tab-order="7">
</c1-input-number>
</td>
</tr>
<tr>
<th>Date</th>
<td>
<c1-input-date id="orderDate" value="@DateTime.Today" is-required="false" tab-order="4">
</c1-input-date>
</td>
<td>
<c1-input-date id="saleDate" value="@DateTime.Today" is-required="false" tab-order="8">
</c1-input-date>
</td>
</tr>
</table>
}
else
{
<table class="input-form">
<tr>
<th></th>
<th>Customer Order</th>
<th>Customer Sale</th>
</tr>
<tr>
<th>Country*</th>
<td>
<c1-combo-box id="orderCountry" is-required="true">
<c1-items-source source-collection="@Countries.GetCountries()"></c1-items-source>
</c1-combo-box>
</td>
<td>
<c1-combo-box id="saleCountry" is-required="true">
<c1-items-source source-collection="@Countries.GetCountries()"></c1-items-source>
</c1-combo-box>
</td>
</tr>
<tr>
<th>Product*</th>
<td>
<c1-combo-box id="orderProduct" is-required="true">
<c1-items-source source-collection="@Products.GetProducts()"></c1-items-source>
</c1-combo-box>
</td>
<td>
<c1-combo-box id="saleProduct" is-required="true">
<c1-items-source source-collection="@Products.GetProducts()"></c1-items-source>
</c1-combo-box>
</td>
</tr>
<tr>
<th>Price*</th>
<td>
<c1-input-number id="orderPrice" min="0" step="10" value="0" format="c0" is-required="true">
</c1-input-number>
</td>
<td>
<c1-input-number id="salePrice" min="0" step="10" value="0" format="c0" is-required="true">
</c1-input-number>
</td>
</tr>
<tr>
<th>Date</th>
<td>
<c1-input-date id="orderDate" value="@DateTime.Today" is-required="false">
</c1-input-date>
</td>
<td>
<c1-input-date id="saleDate" value="@DateTime.Today" is-required="false">
</c1-input-date>
</td>
</tr>
</table>
} <br />
<button id="add-row" class="btn btn-primary col-sm-offset-2">
<b><i class="glyphicon-plus"></i> Add Data</b>
</button>
<br />
</div>
<br />
<br />
<div class="col-md-12">
<div class="col-md-6">
<label>Customer order</label>
<c1-flex-grid id="order" class="grid" auto-generate-columns="false" allow-add-new="true" height="200px"
selection-mode="Row" is-read-only="true">
<c1-flex-grid-column binding="ID" width="40"></c1-flex-grid-column>
<c1-flex-grid-column binding="OrderTime" width="100"></c1-flex-grid-column>
<c1-flex-grid-column binding="Country" width="100">
<c1-data-map display-member-path="Name" selected-value-path="Name" sort-by-display-values="true">
</c1-data-map>
</c1-flex-grid-column>
<c1-flex-grid-column binding="Product" width="100">
<c1-data-map display-member-path="Name" selected-value-path="Name" sort-by-display-values="true">
</c1-data-map>
</c1-flex-grid-column>
<c1-flex-grid-column binding="Price" format="c" width="100"></c1-flex-grid-column>
<c1-items-source read-action-url="@Url.Action("GetCustomerOrder")" disable-server-read="true"></c1-items-source>
</c1-flex-grid>
</div>
<div class="col-md-6">
<label>Customer Sale</label>
<c1-flex-grid id="sale" class="grid" auto-generate-columns="false" allow-add-new="true" height="200px"
selection-mode="Row" is-read-only="true">
<c1-flex-grid-column binding="ID" width="40"></c1-flex-grid-column>
<c1-flex-grid-column binding="Start" width="100"></c1-flex-grid-column>
<c1-flex-grid-column binding="Country" width="100">
<c1-data-map display-member-path="Name" selected-value-path="Name" sort-by-display-values="true">
<c1-items-source source-collection="@FullCountry.GetCountries()"></c1-items-source>
</c1-data-map>
</c1-flex-grid-column>
<c1-flex-grid-column binding="Product" width="100">
<c1-data-map display-member-path="Name" selected-value-path="Id" sort-by-display-values="true">
<c1-items-source source-collection="@CustomerSale.PRODUCTS"></c1-items-source>
</c1-data-map>
</c1-flex-grid-column>
<c1-flex-grid-column binding="Amount" format="c" width="100"></c1-flex-grid-column>
<c1-items-source read-action-url="@Url.Action("GetCustomerSale")" disable-server-read="true"></c1-items-source>
</c1-flex-grid>
</div>
</div>
</div>
</div>
@section Styles{
<style>
.input-form td, th {
padding: 0.5rem;
}
.input-form .wj-template{
width:240px;
}
</style>
}
@section Scripts{
<script>
c1.documentReady(function () {
let cOrderGrid = wijmo.Control.getControl("#order")
let orderCountry = wijmo.Control.getControl("#orderCountry");
let orderProduct = wijmo.Control.getControl("#orderProduct");
let orderPrice = wijmo.Control.getControl("#orderPrice");
let orderDate = wijmo.Control.getControl("#orderDate");
let cSaleGrid = wijmo.Control.getControl("#sale");
let saleCountry = wijmo.Control.getControl("#saleCountry");
let saleProduct = wijmo.Control.getControl("#saleProduct");
let salePrice = wijmo.Control.getControl("#salePrice");
let saleDate = wijmo.Control.getControl("#saleDate");
document.getElementById('add-row').addEventListener('click', function (e) {
//add new row to Order grid
cOrderGrid.focus();
let oview = cOrderGrid.editableCollectionView;
let onewItem = oview.addNew();
onewItem.ID = oview.items.length;
onewItem.OrderTime = orderDate.value;
onewItem.Country = orderCountry.selectedValue;
onewItem.Product = orderProduct.selectedValue;
onewItem.Price = orderPrice.value;
oview.commitNew();
//add new row to Sale grid
cSaleGrid.focus();
let sview = cSaleGrid.editableCollectionView;
let snewItem = sview.addNew();
snewItem.ID = sview.items.length;
snewItem.Start = saleDate.value;
snewItem.Country = saleCountry.selectedValue;
snewItem.Product = saleProduct.selectedValue;
snewItem.Amount = salePrice.value;
sview.commitNew();
e.preventDefault(); // don't submit the form
});
})
</script>
}
@section Settings{
@await Html.PartialAsync("_OptionsMenu", optionsModel)
}
@section Summary{
<p>@Html.Raw(TabOrderRes.TabOrder_Text0)</p>
}
@section Description{
<p>@Html.Raw(TabOrderRes.TabOrder_Description_Text0)</p>
<p>@Html.Raw(TabOrderRes.TabOrder_Description_Text1)</p>
<p>@Html.Raw(TabOrderRes.TabOrder_Description_Text2)</p>
}
マニュアル