ASP.NET MVC コントロールヘルプ
削除
コントロールの使用 > CollectionView > CollectionViewの使用 > サーバー側処理 > 削除

この例では、コントローラー内のアクションを定義して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"))
    )
)