WinForm三层架构,外键对象显示
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上怎么做啊?
[解决办法]
1.DAL怎么可能知道数据结构,
ado就是最好的DAL,十几年了,至今无出其右,照着写不难吧
2.那个Model更是多余,仅仅是user数据就会有N多种输出方式,
比如一个下拉列表,仅仅需要UserId和UserCodeAndName(就象这样:001_张三),
又来一个表格:需要要UserName,Tel,DeptName...等等20个字段,
楼主是不是把所有字段装进1个class,还是写N个class??
而且这些需求经常变化,难不成以后都要修改程序,按你的代码,修改的可不知一处啊
[解决办法]
难道你的程序只用一种方式呈现user??
一张表输出N个视图,
N个表组合M个视图,一个程序的查询方法1000个也不为多,
难道你都要写class??
[解决办法]
ado就能做到,ado就是最好的DAL
[解决办法]
一个应用程序能够随时随地访问多个数据库,这是最基本的设计要求,
反正我没有用到什么抽象工厂,我见过petshop的代码,搞了那么多飞机,也实现不了这个最基本的要求
[解决办法]
枚举吧