FlexGrid には、Excel 形式の高速なセル内編集が組み込みでサポートされています。余分な列を追加して、そこに表示モードと編集モードを切り替えるための[編集]ボタンを置く必要はありません。
ユーザーは、任意のセルでキー入力することで編集を開始できます。これで、そのセルはクイック編集モードになります。このモードでは、カーソルキーを押すと編集が終了し、選択範囲が別のセルに移動します。[F2]キーを押すか、セルをダブルクリックすることで、編集を実行することもできます。これで、そのセルは完全編集モードになります。このモードでは、カーソルキーを押すと、セルテキスト内のカレットが移動します。編集を終了し、別のセルに移動するには、[Enter]、[Tab]、または[Esc]キーを押す必要があります。編集が終了すると、データは自動的に更新されます。
Grid、Column、または Row オブジェクトの IsReadOnly プロパティを使用して、Grid、Column、または Row レベルで編集を無効にすることができます。この例では、ID 列を読み取り専用にします。
次の図は、CollectionView を使用して編集を有効にした後の FlexGrid を示しています。

次の例は、編集モードにあるグリッドの CRUD(Create、Read、Update、Delete)操作を示します。次のコードを使用すると、FlexGrid で Excel 形式の編集が有効になります。この例では、Column Pickerでアプリケーションに追加されたPerson.csモデルを使用しています。
コントローラーに次の参照を追加します。
| C# |
コードのコピー
|
|---|---|
using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using C1.Web.Mvc.Serializition; using C1.Web.Mvc; using <ApplicationName>.Models; |
|
次のコードを使用して、作成、更新、および削除機能を追加します。
| C# |
コードのコピー
|
|---|---|
public class HomeController : Controller { private static List<Person> People = SampleData.GetData(20).ToList<Person>(); public ActionResult Index() { return View(People); } [HttpPost] public ActionResult GridCreate([C1JsonRequest] CollectionViewEditRequest<Person> requestData) { return this.C1Json(CollectionViewHelper.Edit<Person>(requestData, person => { string error = string.Empty; bool success = true; try { person.ID = People.Count; People.Add(person); } catch (Exception e) { error = e.Message; success = false; } return new CollectionViewItemResult<Person> { Error = error, Success = success && ModelState.IsValid, Data = person }; }, () => People)); } [HttpPost] public ActionResult GridUpdateCategory([C1JsonRequest] CollectionViewEditRequest<Person> requestData) { return Update(requestData, People); } private ActionResult Update<T>(CollectionViewEditRequest<T> requestData, List<T> data) where T : class { return this.C1Json(CollectionViewHelper.Edit<T>(requestData, item => { string error = string.Empty; bool success = true; try { Person _item = (Person)(object)item; List<Person> _persons = People; int index = People.FindIndex(x => x.ID == _item.ID); People[index] = _item; } catch (Exception e) { error = e.Message; success = false; } return new CollectionViewItemResult<T> { Error = error, Success = success && ModelState.IsValid, Data = item }; }, () => data.ToList<T>())); } [HttpPost] public ActionResult GridDelete([C1JsonRequest] CollectionViewEditRequest<Person> requestData) { return this.C1Json(CollectionViewHelper.Edit<Person>(requestData, person => { string error = string.Empty; bool success = true; try { int index = People.FindIndex(x=>x.ID == person.ID); People.RemoveAt(index); } catch (Exception e) { error = e.Message; success = false; } return new CollectionViewItemResult<Person> { Error = error, Success = success && ModelState.IsValid, Data = person }; }, () => People)); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } [HttpPost] public PartialViewResult Search() { Random _rnd = new Random(); var val = _rnd.Next(0, 10) < 5 ? 0 : 20; return PartialView("_Grid", SampleData.GetData(val)); } } |
|
| Razor |
コードのコピー
|
|---|---|
@using C1.Web.Mvc.Fluent
@using C1.Web.Mvc
@model IEnumerable<Person>
@(Html.C1().FlexGrid<Person>()
.Id("editGrid")
.Bind(
ib => ib.Bind(Model)
//グリッド内のアイテムを更新するためのアクションURL。
.Update(Url.Action("GridUpdateCategory"))
//グリッドに新しいアイテムを追加するためのアクションURL。
.Create(Url.Action("GridCreate"))
//グリッドからアイテムを削除するためのアクションURL。
.Delete(Url.Action("GridDelete"))
).AutoGenerateColumns(false)
.Columns(columns =>
{
columns.Add(column => column.Binding("ID").IsReadOnly(true));
columns.Add(column => column.Binding("First"));
columns.Add(column => column.Binding("Last"));
columns.Add(column => column.Binding("Hired"));
})
.AllowAddNew(true)
.AllowDelete(true)
.CssStyle("height", "400px")
)
|
|