0

知道DeveExpess ASPxGridView 的人可以看看这个。

这是使用网格编辑列表的最佳/正确方法吗?

我有一个 ItemModel 类型的对象,下面的代码用于允许 ASP.NET 网站用户对 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 回答