大哥大姐们,我是新手,请多关照!
    新近在做网站时遇到问题多多,今天遇到的就是面向对象的了。
    我的网站设计为3层架构。哪3层,我不说大家都知道的。我想把中间层完全封装,即网页程序中根本不直接涉及到对数据库的操作(直接应用中间层即可)。问题是:有些地方感觉到不在程序中引用数据库底层设置还是不行呀,如下:
                  //获取用户类型,绑定到DropDownList控件ddlUserType
                  private void GetUserType()
{
Langzi.UserType myUserType=new Langzi.UserType();//中间层,用户类型类
                           ddlUserType.DataSource=myUserType.GetAllTpName();//获取所有用户类型名称,返回的是DataTable类型
ddlUserType.DataTextField="TypeName";//*****************
ddlUserType.DataBind();
}
   注意:标有“*****************”的那行就是问题所在,TypeName为数据库中用户类型表中用户类型名称对应的字段。如果不要这个,ddlUserType中显示的是System.Data.DataRowView而不是我想要的。
   请问怎么解决这个问题?

解决方案 »

  1.   


            DropDownList1.DataSource = list;//从中间层返回的实体类的集合
            DropDownList1.DataTextField = "Name";//实体类的字段
            DropDownList1.DataValueField = "Age";
            DropDownList1.DataBind();
      

  2.   

    //数据操作的public class TradeType
    {
            public IList<TradeTypeInfo> GetList(string strWhere)
            {
                IList<TradeTypeInfo> ItemList = new List<TradeTypeInfo>();
                string SelectCommandBywhere = SelectCommand;
                if (!string.IsNullOrEmpty(strWhere))
                {
                    if (SelectCommandBywhere.IndexOf("where") != -1)
                    {
                        SelectCommandBywhere += "  " + strWhere;
                    }
                    else
                    {
                        SelectCommandBywhere += " where " + strWhere;
                    }
                    
                }            DataSet ds = DBHelper.ExecuteDataSet(DBHelper.ConnectionStringBrandTransaction, CommandType.Text, SelectCommandBywhere, null);            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    TradeTypeInfo model = new TradeTypeInfo();
                    model.TradeType = int.Parse(ds.Tables[0].Rows[i]["TradeType"].ToString());
                    model.TradeName = ds.Tables[0].Rows[i]["TradeName"].ToString();
                    if (!string.IsNullOrEmpty(ds.Tables[0].Rows[i]["Belong"].ToString()))
                        model.Belong = int.Parse(ds.Tables[0].Rows[i]["Belong"].ToString());
                    if (!string.IsNullOrEmpty(ds.Tables[0].Rows[i]["Levels"].ToString()))
                        model.Levels = int.Parse(ds.Tables[0].Rows[i]["Levels"].ToString());
                    model.LevelStr = ds.Tables[0].Rows[i]["Id"].ToString();                 ItemList.Add(model);
                }            return ItemList;         }}
    在页面使用时可以完全不用涉及到数据库
                this.DropDownList1.DataSource =BM.BLL.TradeType.GetList("");  //
                this.DropDownList1.DataTextField = "TradeName ";
                this.DropDownList1.DataValueField = "TradeType ";
                this.DropDownList1.DataBind();
                ListItem li = new ListItem("请选择...", "0");
                this.DropDownList1.Items.Insert(0, li);
      

  3.   

    很羡慕楼主对OO的热衷
    即使绑定的是实体类,也要指定其DataTextField,且其是一string
    就一个DropDownList控件本身,它提供它的接口,
    和所有的复杂控件一样,这个控件本身隐藏着业务逻辑,比如数据源,显示的字段名,你要指定才能现实你想要的效果
    在UI控件与Data之间,因为显示内容和显示方式的多样性,这两者间是藕合的
    应该知道,允许UI有其业务逻辑层的存在.与你所说的中间层(bll)不同.
    是合理的存在.