关于DataGrid的DataSource设置为对象数组的问题

kelong18433 2007-08-10 04:48:09
关于DataGrid的DataSource设置为对象数组的问题

把对象的数组传给DataGrid的DataSource,DataGrid会把对象中的属性
public string name
{
get{};set{}
}
这种识别为列名,把属性值识别为数据
请问这个是怎么实现的?为什么会这样子?
有什么办法,可以把对象的数组转化成一个table?
请各位高手指点下
...全文
380 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearRui 2007-08-11
  • 打赏
  • 举报
回复
给段代码你看下:
页面代码:
IList list = proMng.GetUsers("email", Pager1.PageNo, pageSize, out rowCount, "UserId DESC");
Pager1.PageCount = rowCount;

this.dgUsers.DataSource = list;
this.dgUsers.DataBind();


业务逻辑层:(就跟你的差不多,把数据转为实体类)
IList lst = new ArrayList();
using (IDataReader reader = DAL.GetUsers(email,pageNo, pageSize, sort))
{
while (reader.Read())
{
IUser user = new User(DAL);
for (int i = 0; i < reader.FieldCount; i ++)
{
user[reader.GetName(i)] = !reader.IsDBNull(i) ? reader.GetValue(i) : System.DBNull.Value;
}

lst.Add(user);
}
}
return lst;

数据访问层:
public IDataReader GetUsers(string email,int pageNo, int pageSize, string sort)
{
string strProc = "up_Profile_UsersGetByType";
string strParms = "Email,NVarChar,50,PageNo,Int,4,Input;PageSize,Int,4,Input;Sort,NVarChar,50,Input";
SqlParameter [] parms = InitParameters(strProc, strParms);
parms[1].Value = email;
parms[2].Value = pageNo;
parms[3].Value = pageSize;
parms[4].Value = sort;
return ExecuteReader(CommandType.StoredProcedure, strProc, parms);
}
kelong18433 2007-08-11
  • 打赏
  • 举报
回复
恩!谢啦 结贴
BearRui 2007-08-11
  • 打赏
  • 举报
回复
是啊,就是用这样:
public ArrayList getAnswerList(string strQuestionID,int pageSize,int pageNo)

但比较多是执行存储过程,而不是仔细SQL语句,然后在存储过程中进行分页.
kelong18433 2007-08-11
  • 打赏
  • 举报
回复
但是还有分页和搜索之类的
你处理的时候,是不是把
public ArrayList getAnswerList(string strQuestionID)
这个方法写成
public ArrayList getAnswerList(string strQuestionID,int pageSize,int pageNo)
这样子?

能给段代码看看就好了
BearRui 2007-08-11
  • 打赏
  • 举报
回复
直接返回arrayAnswer就行了,arraylist本身就是1个集合。他也可以直接绑定datagrid
BearRui 2007-08-11
  • 打赏
  • 举报
回复
public ArrayList getAnswerList(string strQuestionID)
{
ArrayList arrayAnswer=new ArrayList();;
//获取查询语句
string sql=getQueryStr(strQuestionID);
SqlDataReader dr=SqlHelper.ExecuteReader(connStr,CommandType.Text,sql);
while(dr.Read())
{
Answer an=new Answer();
an.id=(long)dr["ID"];
an.userid=functions.getUserNameByUserID((string)dr["USER_ID"]);
an.title=(string)dr["TITLE"];
an.content=(string)dr["CONTENT"];
an.sendTime=(DateTime)dr["SEND_TIME"];
an.QuestionId=(long)dr["QUESTION_ID"];
arrayAnswer.Add(an);
}
return arrayAnswer;
}
kelong18433 2007-08-11
  • 打赏
  • 举报
回复
返回ArrayList?我这里是这样处理的
/// <summary>
/// 获取答案列表
/// </summary>
/// <param name="arrayConditionStr">列名=值 例:TITLE='any string'</param>
/// <returns>Question[]</returns>
public Answer[] getAnswerList(string strQuestionID)
{
ArrayList arrayAnswer=new ArrayList();;
//获取查询语句
string sql=getQueryStr(strQuestionID);
SqlDataReader dr=SqlHelper.ExecuteReader(connStr,CommandType.Text,sql);
while(dr.Read())
{
Answer an=new Answer();
an.id=(long)dr["ID"];
an.userid=functions.getUserNameByUserID((string)dr["USER_ID"]);
an.title=(string)dr["TITLE"];
an.content=(string)dr["CONTENT"];
an.sendTime=(DateTime)dr["SEND_TIME"];
an.QuestionId=(long)dr["QUESTION_ID"];
arrayAnswer.Add(an);
}
return (Answer[])arrayAnswer.ToArray(typeof(Answer));
}

是不是有点脱裤子放屁?因为我刚开始接触面向对象,所以不太懂 -.-|||
BearRui 2007-08-11
  • 打赏
  • 举报
回复
用实体层就是希望不要再使用dataset已经datatable,希望能更加面向对象。

如果还要转为datatable就没有了实体的意义了
BearRui 2007-08-11
  • 打赏
  • 举报
回复
就是加了一个实体规范层啊!
就象Duwamish7中会出现Common项目
不知道大家是怎么处理的啊
----------------------
一般做法就是直接把实体类添加大ArrayList数组中,然后在DataGrid直接绑定ArrayList数组。
oloenxp 2007-08-11
  • 打赏
  • 举报
回复
用反射吧
kelong18433 2007-08-11
  • 打赏
  • 举报
回复
就是加了一个实体规范层啊!
就象Duwamish7中会出现Common项目
不知道大家是怎么处理的啊
honey52570 2007-08-10
  • 打赏
  • 举报
回复
MARK
apple009 2007-08-10
  • 打赏
  • 举报
回复
高手
showmy 2007-08-10
  • 打赏
  • 举报
回复
mark
zhangjingcheng 2007-08-10
  • 打赏
  • 举报
回复
听神话
cpp2017 2007-08-10
  • 打赏
  • 举报
回复
这样太累.
kelong18433 2007-08-10
  • 打赏
  • 举报
回复
把DataTable直接传到前台,被收集的DataTable中,可能不一定是我期望得到的
比如前台需求三列,姓名,名称,年龄。。而datatable中,少了一列年龄
这样前台就会出错
我现在的做法是,利用一个实体类去规范table中的内容,把table读到对象数组中
再返回给前台。。。。
但是做前台的分页、查询等等能用代码,都要有一个固定的标准,所以我打算验证完后
有个能用的办法,把对象数组转换回Table。。
基本上就是这个样子,不知道还有什么其它的好办法
zhchg6666 2007-08-10
  • 打赏
  • 举报
回复
up
cpp2017 2007-08-10
  • 打赏
  • 举报
回复
如果这个对象已知就可以不用反射.
BearRui 2007-08-10
  • 打赏
  • 举报
回复
接分,呵呵
加载更多回复(2)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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