【问题标题】:Save updated object in Generic List在通用列表中保存更新的对象
【发布时间】:2010-08-30 07:59:04
【问题描述】:

我正在努力更新 List 中的业务对象。

我正在使用复选框列表

  1. 单击复选框列表项时
  2. 我检查它是否存在,如果存在我将其标记为脏(意味着用户取消选中一个项目)
  3. 如果没有,我在列表中添加一个新项目(意味着用户点击了一个新项目) 并将其存储在视图状态

    如何使用脏对象更新通用列表? 在表单更新时,我是否会分别列出脏对象和新对象以发送到 DB 层,或者您会推荐任何其他方式吗?

这是我的代码,抱歉逻辑不好,我只是个初学者=(

protected void cblExclusions_SelectedIndexChanged(object sender, EventArgs e)
{
   if (cblExclusions.SelectedIndex != -1)
    {
        ftExclusions myExclusion=new ftExclusions();  // Business object
        ftExclusionsList myExclusionList=new ftExclusionsList();   // Business Obj. List
        int excId = Convert.ToInt32(cblExclusions.SelectedValue.ToString()); // value of checkbox list item which is clicked
        ftExclusionsList tempList = (ftExclusionsList)ViewState["ftExclusionList"];

        ftExclusions isExist =tempList.Find(delegate(ftExclusions tmpExclusion)
            {
                return (tmpExclusion.excluId == excId);
            });

        if (isExist != null)
        {
            isExist.isDirtyExclusion(); // Mark as dirty
            tempList.  // stuck here I don't grasp how to save this back to the list 
        }
        else
        {
            myExclusion = new ftExclusions();
            myExclusion.excluId = excId;
            myExclusion.fTrtID = Convert.ToInt32(lblTreatyNo.Text);
            myExclusion.ftExcluId = -1;     //new record
            myExclusion.isNewExclusion();   // Mark as new
            tempList.Add(myExclusion);
        }
        ViewState["ftExclusionList"] = tempList;                

    }
}

【问题讨论】:

    标签: c# asp.net business-objects


    【解决方案1】:

    您无需将其保存回列表。假设ftExclusions 是类而不是结构,它总是通过引用传递。这意味着tempListisExist 都包含对同一对象的引用。对象的任何更改都将从这两个位置可见。

    【讨论】:

    • 谢谢亚历克斯。是的,它是一个类(哑业务对象)。编辑...好的,您发现这两个地方都可以看到参考。我的部分问题得到了解决。您如何建议从 List 中提取 IsDirty 和 IsNew ?使用 foreach 或任何其他单独的方式?
    • List excludes = tempList.FindAll(e => e.IsDirty || e.IsNew);
    • @Alex 并不是说​​它会对您的结论产生影响,而是参数通常是按值传递的。对于引用类型,referencevalue 传递,对象不由 ref 传递(除非明确指定)
    • @rune fs:说对对象的引用是按值传递或对象是按引用传递只是一种语义。意思是一样的。
    • @Alex 两者之间有一个重要的区别。假设我们有两个方法 Foo(object x) 和 Bar(ref object x)。在第一个(按值传递的引用)中,如果您执行 x = new object() 从方法外部不可见,就好像您在 Bar 中编写相同的内容(其中参数通过引用传递),这将在方法外部产生影响好吧(更改作为参数传入的变量的值)所以在这种情况下并不真正相关,但两者之间存在重要差异
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 2013-04-10
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 2018-01-28
    相关资源
    最近更新 更多