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

サーバー側のCollectionViewHelperクラスがEdit要求を定義して更新を処理します。このサンプルでは、更新アクションの定義方法を示します。このアクションは、CollectionViewHelperのEdit要求を処理することで、ソースデータベース内のレコードを更新可能にします。これによりユーザーは、FlexGridでデータを編集し、ソースデータベース内のそのデータを更新できます。

次の図は、CollectionViewEditRequestがコントローラーで使用された後のFlexGridを示しています。

この例ではC1NWindデータソースを使用しますが、これは「クイックスタート」で示されているようにアプリケーション内で設定されたものです。

次のコード例は、CollectionViewEditRequestを処理してFlexGridでレコードを編集および更新できるようにする方法を示します。

コードの場合

EditController.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 GridUpdateCategory([C1JsonRequest]
    CollectionViewEditRequest<Categories> requestData)
{
    return Update(requestData, db.Categories);
}
private ActionResult Update<T>(CollectionViewEditRequest<T> 
    requestData, DbSet<T> data) where T : class
{
    return this.C1Json(CollectionViewHelper.Edit<T>(requestData, item =>
    {
        string error = string.Empty;
        bool success = true;
        try
        {
            db.Entry(item as object).State = EntityState.Modified;
            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>()));
}

この例では、UpdateアクションはFlexGridのItemSourceのUpdateプロパティに割り当てられています。

Edit.cshtml

Razor
コードのコピー
@(Html.C1().FlexGrid().Id("fGUCView").AutoGenerateColumns(false)
    .Columns(columns => columns
        .Add(c => c.Binding("CategoryID").Header("ID").IsReadOnly(true))
        .Add(c => c.Binding("CategoryName").Header("カテゴリ名"))
        .Add(c => c.Binding("Description").Header("詳細").Width("500")))
    .Bind(ib =>
        ib.Bind(Url.Action("GridReadCategory"))
        .Update(Url.Action("GridUpdateCategory"))
        )
)