0

DeveExpess ASPxGridView を知っている人はこれを見てください。

これは、グリッドを使用してリストを編集するための最良/正しい方法ですか?

Type ItemModel のオブジェクトがあり、以下のコードを使用して、ASP.NET Web サイトのユーザーが ItemModel のリストに対して CRUD 操作を実行できるようにします。

私の問題は、複雑すぎるように見え、グリッドを十分に活用していないと思われることです。

簡単にするために、ItemModel のリストをロードおよび保存するデータベース アクセス コードを残しました。

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        BindGrid();            
    }

    protected void OnRowInserting(object sender, ASPxDataInsertingEventArgs e)
    {
        IList<ItemModel> itemModels = CachedModels;
        int lineID = 0;
        if (itemModels .Count > 0)
        {
            lineID = itemModels[itemModels.Count - 1].LineID + 1;
        }

        ItemModel itemModel = new ItemModel()
        {
             , Code = e.NewValues["Code"] == null ? string.Empty : e.NewValues["Code"].ToString()
             , Name = e.NewValues["Name"] == null ? string.Empty : e.NewValues["Name"].ToString()
             , DateCreated = DateTime.Now
             , DateUpdated = DateTime.Now
        };
        itemModels.Add(itemModel);

        CachedModels = itemModels;

        ASPxGridView aspxGridView = (ASPxGridView)sender;
        aspxGridView.CancelEdit();
        e.Cancel = true;

        BindGrid();
    }
    protected void OnRowUpdating(object sender, ASPxDataUpdatingEventArgs e)
    {
        IList<ItemModel> itemModels = CachedModels;
        int lineID = Convert.ToInt32(e.Keys[0].ToString());

        ItemModel itemModel = null;
        foreach (ItemModel model in itemModels)
        {
            if (model.LineID == lineID)
            {
                itemModel = model;
                break;
            }
        }
        if (itemModel != null)
        {

            itemModel.Code = e.NewValues["Code"] == null ? string.Empty : e.NewValues["Code"].ToString();
            itemModel.Name = e.NewValues["Name"] == null ? string.Empty : e.NewValues["Name"].ToString();
            containerItemModel.DateUpdated = DateTime.Now;

            itemModels[lineID] = itemModel;
            CachedModels = itemModels;
        }
        ASPxGridView aspxGridView = (ASPxGridView)sender;
        aspxGridView.CancelEdit();
        e.Cancel = true;

        BindGrid();
    }
    protected void OnRowDeleting(object sender, ASPxDataDeletingEventArgs e)
    {
        IList<ItemModel> itemModels = CachedModels;

        int lineID = Convert.ToInt32(e.Keys[0].ToString());

        ItemModel itemModel = null;
        foreach (ItemModel model in itemModels)
        {
            if (model.LineID == lineID)
            {
                itemModel = model;
                break;
            }
        }
        if (itemModel != null)
        {
            itemModels.Remove(itemModel);
            CachedModels = itemModels;
        }

        ASPxGridView aspxGridView = (ASPxGridView)sender;
        aspxGridView.CancelEdit();
        e.Cancel = true;

        BindGrid();
    }

    private void BindGrid()
    {
        grdItems.DataSource = CachedModels;
        grdItems.DataBind();
    }
    private IList<ItemModel> CachedModels
    {
        get
        {
            List<ItemModel> models= (List<ItemModel>)Session["ItemModels"];
            if (models == null)
            {
                models= new List<ItemModel>();
                Session["ItemModels"] = models;
            }
            return models;
        }
        set
        {
            Session["ItemModels"] = value;
        }
    }
4

1 に答える 1

0

あなたの現在のコードはかなり正しいと思います。

DX からの推奨される方法は次のとおりです。

ASPxGridView - カスタム データ ソースを使用して CRUD 操作を実装する方法

于 2013-04-03T18:14:41.207 に答える