【问题标题】:How can I pass values from Entity to Presentation in c#如何在 c# 中将值从实体传递到表示
【发布时间】:2013-11-14 17:22:24
【问题描述】:

如何将值从实体层传递到表示层。我已经填充了对象 Person,但是当我在 Presentation 中调用它时它变成了 null。

谁能帮帮我。提前致谢!

实体:

public class Person
{
    public int PersonID { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
}

数据层:

public List<Person> GetPersonSingleByPersonID(string personID)
{
    List<Person> objPerson = new List<Person>();
    DataTable dt = new DataTable();

    ...

    foreach (DataRow dr in dt.Rows)
    {
        objPerson.Add(new Person()
        {
            PersonID = dr["PersonID"].ToString(),
            Firstname = dr["Firstname"].ToString(),
            Lastname = dr["Lastname"].ToString()            
        });
    }
    return objPerson;
}

表示层:

Person objPerson = new Person(); //I think error goes here
txtPersonID.Text = objPerson.PersonID;
txtFirstname.Text = objPerson.Firstname;
txtLastname.Text = objPerson.Lastname;

【问题讨论】:

  • 您确定您的objPersonnull。没有任何异常,但您确定您的文本字段已正确初始化?
  • 您的代码看起来正确。你确定有行吗?并且它们确实包含数据?调试代码时会发生什么? (您也没有显示实际获取数据的代码部分......这也可能相关)。
  • 是的,当我在数据层中进行调试时有结果。但是当我尝试显示来自对象的数据时,它变成了 null
  • GetPersonSingleByPersonID 返回一个列表。有没有可能你做了类似var person = (Person)GetPersonSingleByPersonID(id);
  • 我认为这一行 Person objPerson = new Person();正在创建另一个为 null 的 Person 实例。如何在不实例化新 Person 的情况下将值从 DAL 检索到我的演示文稿?

标签: c# oop


【解决方案1】:

您的代码存在一些问题:

  1. 为什么GetPersonSingleByPersonID(string personID) 返回一个列表? 如果你想返回一个单身人,你的方法应该定义为Person GetPersonSingleByPersonID(string personID)

  2. 您根本没有调用GetPersonSingleByPersonID(string personID) 方法。相反,您正在创建 Person 类 (Person objPerson = new Person()) 的新“空白”实例 您需要调用 GetPersonSingleByPersonID(id) 并且由于您返回的是列表而不是单个对象(请参见第 1 点。)您可能需要添加 .FirstOrDefault()

Person objPerson = GetPersonSingleByPersonID(id).FirstOrDefault()

【讨论】:

  • 对不起,我把我的方法隐藏在省略号中,这是我的代码.. List newSiteCompany = new List();数据表 dt = 新数据表(); SqlParameter[] sqlParam = new SqlParameter[1]; sqlParam[0] = new SqlParameter("@CompanyID", SqlDbType.VarChar); sqlParam[0].Value = companyID; CommonDAL commonDAL = new CommonDAL(); dt = commonDAL.SelectQueryProc("pSiteCompany_GetSiteCompanySingleByCompanyID", sqlParam);
  • @devkiat - 更新你的问题,上面的代码不可读。
【解决方案2】:

您需要在数据访问层中调用 GetPersonaSingleByPersonId() 方法。 创建 DAL 的实例,然后调用该方法。这将返回您想要的带有详细信息的对象,然后您最终将其分配给文本框。

请记住,该方法返回一个集合...因此,如果您遍历整个集合并将其写入文本框,您将覆盖文本框中的先前值。

【讨论】:

    【解决方案3】:

    您最好在数据表示之间有一个业务层,您可以在其中从数据层获取实体并处理它们,然后转换为表示层对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-14
      • 2020-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      相关资源
      最近更新 更多