gpt4 book ai didi

c# - 如何使用 ObjectDataSource 将复杂实体类型绑定(bind)到 Gridview

转载 作者:行者123 更新时间:2023-11-30 22:35:16 24 4
gpt4 key购买 nike

我有一个实体

class Person
{
public int Age{get;set;}
public string Name{get;set;}
public Department Dept{get;set;}
}

class Department
{
public int DeptId{get;set;}
public string DeptName{get;set}
}

现在我使用 ObjectDataSource 控件将 Collection 绑定(bind)到 GridView。在 Dept of Person 类的 TemplateField 下看起来像

<EditItemTemplate>
<asp:DropDownList ID="cmbStatus" DataTextField="DeptName" SelectedValue='<%# Bind("Dept.DeptId") %>'
DataValueField="DeptId" runat="server" CssClass="ddl150px ddlbg"
DataSourceID="deptCollection" />
<asp:ObjectDataSource ID="deptCollection" runat="server"
SelectMethod="GetDeptList" TypeName="LIMS.BusinessObject.Department" >
</asp:ObjectDataSource>
</EditItemTemplate>

现在我的网格使用

绑定(bind)
            <asp:ObjectDataSource ID="PersonCollection" runat="server" 
SelectMethod="GetPersonList"
TypeName="LIMS.BusinessObject.Person"
DataObjectTypeName="LIMS.DomainModel.Person"
DeleteMethod="Delete" InsertMethod="Create" UpdateMethod="Update"
ondeleting="PersonCollection_Deleting"
onupdating="PersonCollection_Updating">
</asp:ObjectDataSource>

现在,当我尝试更新此 Person 实体时,它会抛出错误,因为下拉列表显示值字段和文本字段,而 Person 实体需要一个实际绑定(bind)到下拉列表的 Dept 实体

最佳答案

您不应该直接在表示层 aspx 中使用复杂的实体。因为如果您更改域模型,例如添加一些字段,您将更新应用程序的每个 aspx。您应该提供这样的“ View 模型”:

class PersonView
{
public int Age{get;set;}
public string Name{get;set;}

public int DeptId{get;set;}
public string DeptName {get { ... }}
}

它不应该是 DTO:您不需要在主机之间传输要序列化的数据,而是 View 的模型。

薄层可以将模型实体转换为 View 模型。它可能是 DataObject得到 ObjectDataSource 的良好支持。

关于c# - 如何使用 ObjectDataSource 将复杂实体类型绑定(bind)到 Gridview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7477081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com