WinForm三层架构,外键对象显示

王晓彤 2012-03-10 10:19:39
Models实体类使用外键对象

public class UserType
{
public Int32 Id { get; set; }
public string TypeName { get; set; }
}
public class UserInfo
{
public Int32 Id { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public UserType UserType { get; set; }
}


DAL层

public IList<UserInfo> GetAllUser()
{
IList<UserInfo> list = new List<UserInfo>();
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from UserInfo";
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
UserTypeService userTypeService = new UserTypeService();
UserInfo userInfo = new UserInfo();
userInfo.Id = (Int32)reader["Id"];
userInfo.Name = (string)reader["Name"];
userInfo.Gender = (string)reader["Gender"];
userInfo.UserType = userTypeService.GetUserTypeById((Int32)reader["TypeId"]);//外键的处理
list.Add(userInfo);
}
}
}
return list;
}


在表示层我拿到的是List泛型,直接与DataGridView属性DataSource绑定,UserType这一列显示Personal.Models.UserType,没有外键对象。
如果我在BLL层将List泛型转成DataTable传给表示层的方法可不可取。
有没有更好的方法能在DataGridView和ComboBox控件显示外键对象。Asp.Net上用自定义模板可以显示,那WinForm上怎么做啊?
...全文
468 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010477670 2013-08-30
  • 打赏
  • 举报
回复
直接在你的dal层函数中返回一个datatable类型,用SqlDataAdapter,然后将它的对象填充到一个datatable类型的对象中。 近2天才用到控件,以前一直做web程序,没用过控件。
w649202282 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

自己顶。。。
C# code

var query = from user in userList
select new
{
姓名 = user.Name,
性别 = user.Gender,
类型 = user.UserType.TypeName
……
[/Quote]这种方式确实能解决我的问题,顶!
bindofn 2012-03-27
  • 打赏
  • 举报
回复
枚举吧
缪军 2012-03-13
  • 打赏
  • 举报
回复
一个应用程序能够随时随地访问多个数据库,这是最基本的设计要求,
反正我没有用到什么抽象工厂,我见过petshop的代码,搞了那么多飞机,也实现不了这个最基本的要求
王晓彤 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 microtry 的回复:]

ado就能做到,ado就是最好的DAL
[/Quote]

假设今后用到抽象工厂,那样会不会不方便。
缪军 2012-03-13
  • 打赏
  • 举报
回复
ado就能做到,ado就是最好的DAL
王晓彤 2012-03-13
  • 打赏
  • 举报
回复
我的话会在DAL层写方法,没想过那么多查询方法。
那按照你说的话,有什么解决方案吗?
缪军 2012-03-13
  • 打赏
  • 举报
回复
难道你的程序只用一种方式呈现user??
一张表输出N个视图,
N个表组合M个视图,一个程序的查询方法1000个也不为多,
难道你都要写class??
macooidle 2012-03-13
  • 打赏
  • 举报
回复
三层是有代价滴。。。
PaulyJiang 2012-03-13
  • 打赏
  • 举报
回复
NetTiers 可以搞定
我也有自己写的类似的东西不过那个只能在Oracle中(我只去研究过Oracle)

我推荐NetTiers 好东西 产生出来的每个Table 每个View都对应一个Entity 不错的
愚知 2012-03-13
  • 打赏
  • 举报
回复
动软 生存一个三层、工厂模式的参照下。
冰镇宝贝321 2012-03-13
  • 打赏
  • 举报
回复
ktei2008 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 microtry 的回复:]

ado就能做到,ado就是最好的DAL
[/Quote]
Go back to original? Great...
王晓彤 2012-03-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 microtry 的回复:]

1.DAL怎么可能知道数据结构,
ado就是最好的DAL,十几年了,至今无出其右,照着写不难吧
2.那个Model更是多余,仅仅是user数据就会有N多种输出方式,
比如一个下拉列表,仅仅需要UserId和UserCodeAndName(就象这样:001_张三),
又来一个表格:需要要UserName,Tel,DeptName...等等20个字段,
楼主是不是把所有字段装进1个cl……
[/Quote]

一个实体类对应一张表啊,不是一个字段就写一个类。。。
缪军 2012-03-12
  • 打赏
  • 举报
回复
1.DAL怎么可能知道数据结构,
ado就是最好的DAL,十几年了,至今无出其右,照着写不难吧
2.那个Model更是多余,仅仅是user数据就会有N多种输出方式,
比如一个下拉列表,仅仅需要UserId和UserCodeAndName(就象这样:001_张三),
又来一个表格:需要要UserName,Tel,DeptName...等等20个字段,
楼主是不是把所有字段装进1个class,还是写N个class??
而且这些需求经常变化,难不成以后都要修改程序,按你的代码,修改的可不知一处啊
王晓彤 2012-03-12
  • 打赏
  • 举报
回复
自己顶。。。

var query = from user in userList
select new
{
姓名 = user.Name,
性别 = user.Gender,
类型 = user.UserType.TypeName
};

这样做。 如果用视图的话UserType类是不是显得多余了,以后数据更新也难吧?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧