大哥大姐们,我是新手,请多关照!
新近在做网站时遇到问题多多,今天遇到的就是面向对象的了。
我的网站设计为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而不是我想要的。
请问怎么解决这个问题?
新近在做网站时遇到问题多多,今天遇到的就是面向对象的了。
我的网站设计为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而不是我想要的。
请问怎么解决这个问题?
解决方案 »
- 请教网站二级域名绑定
- 请求asp.net防止SQL注入,或ASP.NET 过滤器
- 有没有免费的ASP.NET 报表控件?
- 自定义页面不起作用,为什么?
- 求高手指点
- ConnectionInfo.DecryptDBConnectionString无法显示出来,高手帮帮我
- 怎么来判断我的服务器上的网站可否访问?
- 在asp.net中如何使用对话框?
- 一个file控件的问题!很着急!求助!!
- 各位asp.net高手:请问在asp.net中如何编写一个“确认框”?急!急!急!在线等待!
- 很久没发问了 现在来问个问题 可能用master Themes能解决 请高手进来看看
- sql server如果用中文的列名是不是容易出错?
DropDownList1.DataSource = list;//从中间层返回的实体类的集合
DropDownList1.DataTextField = "Name";//实体类的字段
DropDownList1.DataValueField = "Age";
DropDownList1.DataBind();
{
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);
即使绑定的是实体类,也要指定其DataTextField,且其是一string
就一个DropDownList控件本身,它提供它的接口,
和所有的复杂控件一样,这个控件本身隐藏着业务逻辑,比如数据源,显示的字段名,你要指定才能现实你想要的效果
在UI控件与Data之间,因为显示内容和显示方式的多样性,这两者间是藕合的
应该知道,允许UI有其业务逻辑层的存在.与你所说的中间层(bll)不同.
是合理的存在.