问题描述:用codesmith生成了实体类,把数据库表的外键都作为对象来处理,感觉就是一个“折腾”!这是数据访问层代码:其中UserInfo是userId外键作为对象的引用,类似的还有ApproveState这个也是外键引用对象
/// <summary>
/// 获取汇款信息列表
/// </summary>
/// <returns></returns>
public List<PostHistory> GetPostHistory()
{
List<PostHistory> postHistoryList = new List<PostHistory>(); //保存汇款历史列表 string sql = "SELECT a.PostHistoryId,a.UserId,a.Bank,a.Money,a.PostTime,a.PostDesc, CASE a.ApproveState WHEN 1 THEN '未追加' WHEN 2 THEN '已撤回' ELSE '是' END AS ApproveState,b.UserName FROM PostHistory a,UserInfo b WHERE a.UserId=b.UserId ORDER BY a.PostTime DESC"; using (SqlConnection connection = new SqlConnection(_conString))
{
//create command
SqlCommand command = new SqlCommand(sql,connection); //open connection
connection.Open(); //get datareader
SqlDataReader reader = command.ExecuteReader(); while (reader.Read())
{
userService = new UserService();
approveStateService = new ApproveStateService(); PostHistory postHistory = new PostHistory();
postHistory.PostHistoryId = (int)reader["PostHistoryId"]; string userId = (string)reader["UserId"];
//userInfo
postHistory.User = userService.GetUserInfo(userId); postHistory.Bank = (string)reader["Bank"];
postHistory.Money = (int)reader["Money"];
postHistory.PostTime = (DateTime)reader["PostTime"];
postHistory.PostDesc = (string)reader["PostDesc"]; int approveStateId=0;
string approveState =(string)reader["ApproveState"]; if (approveState == "未追加")
approveStateId = 1;
else if (approveState == "已撤回")
approveStateId = 2;
else if (approveState == "是")
approveStateId = 3; //approveState
postHistory.ApproveState = approveStateService.GetApproveState(approveStateId); //add to the collection
postHistoryList.Add(postHistory);
}
}
return postHistoryList;
}
如下是gridView绑定代码:
<asp:GridView
ID="grdPostInfo"
DataKeyNames="PostHistoryId"
DataSourceID="srcPostInfo"
AllowPaging="true"
PageSize="5"
CssClass="gvUserInfoStyle"
HeaderStyle-CssClass="gvUserInfo_HeaderStyle"
GridLines="Both"
EmptyDataText="暂无用户汇款信息!"
AutoGenerateColumns="false"
runat="server">
<Columns>
<asp:TemplateField HeaderText="选定(√)">
<ItemTemplate>
<asp:CheckBox
ID="chkSelectAll_AdminHomePost"
runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField
HeaderText="用户ID"
DataField="PostHistory.User.UserId" /> <================此处数据绑定的问题
<asp:BoundField
HeaderText="金额(元)"
DataField="Money" />
<asp:BoundField
HeaderText="汇款时间"
DataField="PostTime" />
<asp:BoundField
HeaderText="是否已追加金额"
DataField="ApproveState" />
<asp:HyperLinkField
HeaderText="汇款详情"
Text="查看详情"
DataNavigateUrlFormatString="DisplayPostDetail.aspx?id={0}"
DataNavigateUrlFields="PostHistoryId" />
</Columns>
</asp:GridView>
业务逻辑只是单纯的返回数据访问层的PostHistory列表。这个鬼东西怎么个绑定法呀?
/// <summary>
/// 获取汇款信息列表
/// </summary>
/// <returns></returns>
public List<PostHistory> GetPostHistory()
{
List<PostHistory> postHistoryList = new List<PostHistory>(); //保存汇款历史列表 string sql = "SELECT a.PostHistoryId,a.UserId,a.Bank,a.Money,a.PostTime,a.PostDesc, CASE a.ApproveState WHEN 1 THEN '未追加' WHEN 2 THEN '已撤回' ELSE '是' END AS ApproveState,b.UserName FROM PostHistory a,UserInfo b WHERE a.UserId=b.UserId ORDER BY a.PostTime DESC"; using (SqlConnection connection = new SqlConnection(_conString))
{
//create command
SqlCommand command = new SqlCommand(sql,connection); //open connection
connection.Open(); //get datareader
SqlDataReader reader = command.ExecuteReader(); while (reader.Read())
{
userService = new UserService();
approveStateService = new ApproveStateService(); PostHistory postHistory = new PostHistory();
postHistory.PostHistoryId = (int)reader["PostHistoryId"]; string userId = (string)reader["UserId"];
//userInfo
postHistory.User = userService.GetUserInfo(userId); postHistory.Bank = (string)reader["Bank"];
postHistory.Money = (int)reader["Money"];
postHistory.PostTime = (DateTime)reader["PostTime"];
postHistory.PostDesc = (string)reader["PostDesc"]; int approveStateId=0;
string approveState =(string)reader["ApproveState"]; if (approveState == "未追加")
approveStateId = 1;
else if (approveState == "已撤回")
approveStateId = 2;
else if (approveState == "是")
approveStateId = 3; //approveState
postHistory.ApproveState = approveStateService.GetApproveState(approveStateId); //add to the collection
postHistoryList.Add(postHistory);
}
}
return postHistoryList;
}
如下是gridView绑定代码:
<asp:GridView
ID="grdPostInfo"
DataKeyNames="PostHistoryId"
DataSourceID="srcPostInfo"
AllowPaging="true"
PageSize="5"
CssClass="gvUserInfoStyle"
HeaderStyle-CssClass="gvUserInfo_HeaderStyle"
GridLines="Both"
EmptyDataText="暂无用户汇款信息!"
AutoGenerateColumns="false"
runat="server">
<Columns>
<asp:TemplateField HeaderText="选定(√)">
<ItemTemplate>
<asp:CheckBox
ID="chkSelectAll_AdminHomePost"
runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField
HeaderText="用户ID"
DataField="PostHistory.User.UserId" /> <================此处数据绑定的问题
<asp:BoundField
HeaderText="金额(元)"
DataField="Money" />
<asp:BoundField
HeaderText="汇款时间"
DataField="PostTime" />
<asp:BoundField
HeaderText="是否已追加金额"
DataField="ApproveState" />
<asp:HyperLinkField
HeaderText="汇款详情"
Text="查看详情"
DataNavigateUrlFormatString="DisplayPostDetail.aspx?id={0}"
DataNavigateUrlFields="PostHistoryId" />
</Columns>
</asp:GridView>
业务逻辑只是单纯的返回数据访问层的PostHistory列表。这个鬼东西怎么个绑定法呀?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货