この例では、コントローラー内のアクションを定義してCollectionViewHelperのEdit要求を処理することにより、データベースから列を削除する方法を示します。
次の図は、CollectionViewEditRequestがコントローラーで使用された後のFlexGridを示しています。
この例ではC1NWindデータソースを使用しますが、これは「クイックスタート」で示されているようにアプリケーション内で設定されたものです。行を削除するには、行ヘッダーをクリックして行を選択し、キーボードの[Delete]ボタンをクリックします。選択された行が削除され、それに合わせてソースデータベースが更新されます。
次のコードは、CollectionViewEditRequestを処理してFlexGridでレコードを削除できるようにする方法を示したものです。
DeleteController.cs
C# |
コードのコピー
|
---|---|
//FlexGrid に対してデータソースを定義します private C1NWindEntities db = new C1NWindEntities(); public ActionResult Index() { return View(db); } //JSONのインスタンスを作成します public ActionResult GridReadCategory([C1JsonRequest] CollectionViewRequest<Categories> requestData) { return this.C1Json(CollectionViewHelper.Read(requestData, db.Categories)); } public ActionResult GridDeleteCategory([C1JsonRequest] CollectionViewEditRequest<Categories> requestData) { return Delete(requestData, db.Categories, item => item.CategoryID); } private ActionResult Delete<T>(CollectionViewEditRequest<T> requestData, DbSet<T> data, Func<T, object> getKey) where T : class { return this.C1Json(CollectionViewHelper.Edit<T>(requestData, item => { string error = string.Empty; bool success = true; try { var resultItem = data.Find(getKey(item)); data.Remove(resultItem); db.SaveChanges(); } catch (DbEntityValidationException e) { error = string.Join(",", e.EntityValidationErrors.Select(result => { return string.Join(",", result.ValidationErrors .Select(err => err.ErrorMessage)); })); success = false; } catch (Exception e) { error = e.Message; success = false; } return new CollectionViewItemResult<T> { Error = error, Success = success && ModelState.IsValid, Data = item }; }, () => data.ToList<T>())); } |
この例では、DeleteアクションはFlexGridのItemSourceのDeleteプロパティに割り当てられています。
Delete.cshtml
Razor |
コードのコピー
|
---|---|
@(Html.C1().FlexGrid().Id("fGDelCView").AutoGenerateColumns(false).IsReadOnly(false) .Columns(columns => columns .Add(c => c.Binding("CategoryID").Header("ID")) .Add(c => c.Binding("CategoryName").Header("カテゴリ名")) .Add(c => c.Binding("Description").Header("詳細").Width("*"))) .AllowDelete(true) .Bind( ib => ib.Bind(Url.Action("GridReadCategory")) .Delete(Url.Action("GridDeleteCategory")) ) ) |