关于DataGrid的DataSource设置为对象数组的问题把对象的数组传给DataGrid的DataSource,DataGrid会把对象中的属性
public string name
{
get{};set{}
}
这种识别为列名,把属性值识别为数据
请问这个是怎么实现的?为什么会这样子?
有什么办法,可以把对象的数组转化成一个table?
请各位高手指点下

解决方案 »

  1.   

    把DataTable直接传到前台,被收集的DataTable中,可能不一定是我期望得到的
    比如前台需求三列,姓名,名称,年龄。。而datatable中,少了一列年龄
    这样前台就会出错
    我现在的做法是,利用一个实体类去规范table中的内容,把table读到对象数组中
    再返回给前台。
    但是做前台的分页、查询等等能用代码,都要有一个固定的标准,所以我打算验证完后
    有个能用的办法,把对象数组转换回Table。。
    基本上就是这个样子,不知道还有什么其它的好办法
      

  2.   

    就是加了一个实体规范层啊!
    就象Duwamish7中会出现Common项目
    不知道大家是怎么处理的啊
      

  3.   

    就是加了一个实体规范层啊!
    就象Duwamish7中会出现Common项目
    不知道大家是怎么处理的啊
    ----------------------
    一般做法就是直接把实体类添加大ArrayList数组中,然后在DataGrid直接绑定ArrayList数组。
      

  4.   

    用实体层就是希望不要再使用dataset已经datatable,希望能更加面向对象。如果还要转为datatable就没有了实体的意义了
      

  5.   

    返回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));
    }是不是有点脱裤子放屁?因为我刚开始接触面向对象,所以不太懂 -.-|||
      

  6.   

    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;
    }
      

  7.   

    直接返回arrayAnswer就行了,arraylist本身就是1个集合。他也可以直接绑定datagrid
      

  8.   

    但是还有分页和搜索之类的
    你处理的时候,是不是把
    public ArrayList getAnswerList(string strQuestionID)
    这个方法写成
    public ArrayList getAnswerList(string strQuestionID,int pageSize,int pageNo)
    这样子?能给段代码看看就好了
      

  9.   

    是啊,就是用这样:
    public ArrayList getAnswerList(string strQuestionID,int pageSize,int pageNo)但比较多是执行存储过程,而不是仔细SQL语句,然后在存储过程中进行分页.
      

  10.   

    给段代码你看下:
    页面代码:
    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);
    }