用实体类遇到的郁闷问题

九章落地 2007-06-19 10:20:56
我定义了一个可视化的实体类:UserInfo
[Serializable]
public class UserInfo
{
private string id;
private string name;
private string password;

public UserInfo() { }

public UserInfo(string id, string name)
{
this.id = id;
this.name = name;
}

public UserInfo(string id, string name, string password)
{
this.id = id;
this.name = name;
this.password=password;
}
......

}

接着在一个实现类里返回序列化的实体类:
public IList<UserInfo> GetUsers()
{
SqlDataReader dr;
IList<UserInfo> users = new List<UserInfo>();
strSql = "Select Staff_Id,Staff_Name,IsActive From tblUsers";

DB.RunSql(strSql, out dr);

while (dr.Read())
{
UserInfo aUser = new UserInfo(dr.GetString(0), dr.GetString(1));
users.Add(aUser);
}

dr.Close();

return users;
}

谁知道返回的结果有3个字段:Id,Name,Password;但我只想返回前两个字段而已呀?请问这如何解决?不会又要定义一个只有两个字段的实体类吧?

请高兴解疑,谢谢!
...全文
899 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
九章落地 2007-06-21
  • 打赏
  • 举报
回复
TO:Ivony(授人以鱼不如授人以渔,上海谋生)

我也不明白,何事让您如此激动?!


难道面向数据驱动就得用DataTable?难道您不知道DataTable是弱类型?难道您之前的学习过程是一蹴而就的?

我只是学习面向对象编程遇到疑问而上网请教罢了,您懂您就给我讲嘛!老实说,我不认为您上面的这翻话对我有帮助!
lussnailatnet 2007-06-20
  • 打赏
  • 举报
回复
有没有高手指点呀.
我想只能用两个类(可以是继承)来实现吧
一个包函Password ,一个没有
Ivony 2007-06-20
  • 打赏
  • 举报
回复
我实在搞不懂
楼主是在不是脑子不好使
放着DataTable/DataView的架构不用
难道是没事吃饱了撑的么?


你既然是数据驱动的,何苦用实体类,每个东西有它的适用场景,不是说你想学什么东西就可以生搬硬套的。
hm7921936 2007-06-20
  • 打赏
  • 举报
回复
我看还是继续吃粽子比较好……
zhnzzy 2007-06-20
  • 打赏
  • 举报
回复
好象只能取整个实体类,不能取部分
effun 2007-06-20
  • 打赏
  • 举报
回复
难道你要对每一种GridView布局都派生一个类出来??
MicroDeviser 2007-06-20
  • 打赏
  • 举报
回复
.........
九章落地 2007-06-20
  • 打赏
  • 举报
回复
TO:effun(地瓜)

//您讲的通过定义GridView列来实现显示两列,这个方法我有想过.
只是:如果我的实体集里有20个字段,然后只给两个字段赋值,再返回一个序列化的实体集,如果记录多,这样不是很浪费资源吗?

我刚刚学习实体类,所以想知道有没有可行并高效的方法解决此类问题:只返回实体类的若干字段集.


TO:zhnzzy(心如止水)
//我上面有提过,我是把其中一部分源码剪出来的,Sql语句是笔误.
zhnzzy 2007-06-20
  • 打赏
  • 举报
回复
strSql = "Select Staff_Id,Staff_Name,IsActive From tblUsers";

DB.RunSql(strSql, out dr);
-------
select了3个参数吗??不是要2个吗?
effun 2007-06-20
  • 打赏
  • 举报
回复
//之前我也是和你同样的想法,不用第3种构造函数就可了.但当我把返回的实体集合绑定到GridView时,实体类的所有属性(字段)都会显示出来.您可以亲自试试.
--------------------------

楼主,我总算是明白你的意思了,你是要把实体类直接绑定到GridView控件上,如果有Password字段的话那就会显示这一列了,而这是你所不期望的。
假设我理解是正确的,那就是楼主你的问题了,我记得在GridView控件上,如果不使用自动生成列的功能,你可以指定要显示哪些列,而这些列绑定到哪个属性。
jiatong1981 2007-06-19
  • 打赏
  • 举报
回复
[Serializable]
public class MyObject
{
public int n1;
[NonSerialized] public int n2;//使用NonSerialized关键字指定该字段不参与序列化
public String str;
}
leng9996 2007-06-19
  • 打赏
  • 举报
回复
对阿,那你就可以再加上个字段,然后password属性里通过新添加的字段控制password字段显示与否

哎,最近怎么了,连话都说不利索了。。。。。
leng9996 2007-06-19
  • 打赏
  • 举报
回复
对阿,那你就可以再加上个字段,然后password属性里通过新添加的字段控制该字段显示与否
leng9996 2007-06-19
  • 打赏
  • 举报
回复
对阿,那你就可以再加上个字段,然后password属性里控制该字段显示与否
九章落地 2007-06-19
  • 打赏
  • 举报
回复
TO:leng9996(探针)

//UserInfo后面有属性声明的呀!

TO:LifeForCode(用生命编程.再入轮回(2007))

//返回集合的时候不想要Password,但我添加记录的时候,要用Password字段呀

TO:wxndiablo(刺客)

//我现在想到,可以通过继承关系来定义实体类,只是不知此方法是否是最优!
leng9996 2007-06-19
  • 打赏
  • 举报
回复
你的3个字段是私有的,怎么会显示出来呢?
刺客 2007-06-19
  • 打赏
  • 举报
回复
不大明白,不过可能就是的,因为在new 一个新List时,结构就已经定了呀,所以为了满足这结构,一定会把所以的字段都加上的吧!
高手去哪了?
LifeForCode 2007-06-19
  • 打赏
  • 举报
回复
。。!!
Password你不想用就不用呗
难道你的意思是:要是没有赋值该实体就没有这个属性?
九章落地 2007-06-19
  • 打赏
  • 举报
回复
高手都在家吃粽子吗?!
Ivony 2007-06-19
  • 打赏
  • 举报
回复
我看还是继续吃粽子比较好……
加载更多回复(5)

110,536

社区成员

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

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

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