关于DataGrid的DataSource设置为对象数组的问题把对象的数组传给DataGrid的DataSource,DataGrid会把对象中的属性
public string name
{
get{};set{}
}
这种识别为列名,把属性值识别为数据
请问这个是怎么实现的?为什么会这样子?
有什么办法,可以把对象的数组转化成一个table?
请各位高手指点下
public string name
{
get{};set{}
}
这种识别为列名,把属性值识别为数据
请问这个是怎么实现的?为什么会这样子?
有什么办法,可以把对象的数组转化成一个table?
请各位高手指点下
比如前台需求三列,姓名,名称,年龄。。而datatable中,少了一列年龄
这样前台就会出错
我现在的做法是,利用一个实体类去规范table中的内容,把table读到对象数组中
再返回给前台。
但是做前台的分页、查询等等能用代码,都要有一个固定的标准,所以我打算验证完后
有个能用的办法,把对象数组转换回Table。。
基本上就是这个样子,不知道还有什么其它的好办法
就象Duwamish7中会出现Common项目
不知道大家是怎么处理的啊
就象Duwamish7中会出现Common项目
不知道大家是怎么处理的啊
----------------------
一般做法就是直接把实体类添加大ArrayList数组中,然后在DataGrid直接绑定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));
}是不是有点脱裤子放屁?因为我刚开始接触面向对象,所以不太懂 -.-|||
{
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;
}
你处理的时候,是不是把
public ArrayList getAnswerList(string strQuestionID)
这个方法写成
public ArrayList getAnswerList(string strQuestionID,int pageSize,int pageNo)
这样子?能给段代码看看就好了
public ArrayList getAnswerList(string strQuestionID,int pageSize,int pageNo)但比较多是执行存储过程,而不是仔细SQL语句,然后在存储过程中进行分页.
页面代码:
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);
}