当前位置:首页 > 网络编程 > 软件语言 > .NET > 在Web开发中绑定数据的三种方法

在Web开发中绑定数据的三种方法

点击次数:58 次 发布日期:2008-11-06 08:11:35 作者:源代码网
源代码网推荐
广告载入中

源代码网整理以下在web开发中,数据绑定是所有程序员都会遇到,并且经常处理的问题。下面就这个小问题和大家探讨一下关于强类型支持在这个问题中的应用。拙劣不当之处,敬请各路高手斧正。
 
先简单说一下,在我们的数据库有这样一个Programmer表,它有两个字段Name和WebSite,类型都是字符串。我们要处理的问题即是,把这个表从数据库中读出来并在页面上显示。简单吧,让我们开始。
现在我们是一个新手,对.Net数据绑定一无所知,于是我到msdn2搜索了一下,找到这么一个例子:
SqlDataSource


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">











这个例子用Repeater的DataSourceID绑定SqlDataSource,简单好用,不需要写什么cs代码,把这个例子修改一下,就可以解决我们的问题。这是第一种方法。这种方法或许只在学校课堂里存在,.Net自学者怕也不屑于学它。
第二种方法。随便在google里搜索一下,发现在页面中直接绑定数据源这种方法很幼稚,在cs中绑定数据被推荐。于是我们想了想,写了如下代码用于解决问题:


页面代码:


源代码网整理以下
Name:

WebSite:">




源代码网整理以下
-------------------------------------------- 软件开发网 www.mscto.com



cs代码:
public partial class StrongTypeDataBinding : System.Web.UI.Page
{
private DataTable _programmerTbl;
private static object syncObj = new object();

protected void Page_Load(object sender, EventArgs e)
{
ProgrammerRepeater_2.DataSource = ProgrammerTable;
ProgrammerRepeater_2.DataBind();
}

public DataTable ProgrammerTable
{
get
{
if (null == _programmerTbl)
{
lock (syncObj)
{
if (null == _programmerTbl)
{

_programmerTbl = new DataTable();
_programmerTbl.Columns.Add("Name", typeof(string));
_programmerTbl.Columns.Add("WebSite", typeof(string));

_programmerTbl.Rows.Add("sban", "http://www.sban.com.cn/");
_programmerTbl.Rows.Add("8th pawnshop",
"http://sban.cnblogs.com/");
}
}

}

return _programmerTbl;
}
}
}
为了重点说明数据绑定,从数据库读取数据改为由代码生成数据。
这便是第二种方法,编译一下,通过,没有问题。相信98%的读者都没有发现,这个程序其实是不能正常运行的。原因在呢?
看这句:
WebSiteName这个字段其实是不存在的,但是编译器无法替我检测到这错误。这种错误,此时只能依赖于程序员的细心和严谨。但是经验告诉我们,这份依赖是不可取的。我们需要强类型支持来避免这种错误。
下面我们看第三种解决方法:
页面代码:


源代码网整理以下
Name:

WebSite:




源代码网整理以下
--------------------------------------------



cs代码:
public partial class StrongTypeDataBinding : System.Web.UI.Page
{
private IList 软件开发网 www.mscto.com _programmerList;
private static object syncObj = new object();

protected void Page_Load(object sender, EventArgs e)
{
ProgrammerRepeater_1.DataSource = ProgrammerList;
ProgrammerRepeater_1.DataBind();
}

public IList

ProgrammerList
{
get
{
if (null == _programmerList)
{
lock (syncObj)
{
if (null == _programmerList)
{
_programmerList = new List
软件开发网 www.mscto.com
();
_programmerList.Add(new Programmer { Name = "sban",
WebSite = "http://www.sban.com.cn/" });
_programmerList.Add(new Programmer { Name = "8th pawnshop",
WebSite = "http://sban.cnblogs.com/" });
}
}

}

return _programmerList;
}
}
}
public class Programmer
{
private string _name;

public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}

private string _webSite;

public string WebSite
{
get
{
return _webSite;
}
set
{
_webSite = value;
}
}

}
在数据绑定中虽然有显式类型转化,但它可以给我们提供强类型支持,是可以接受的。并且Ilist代替Table,也有更灵活的编程体验。

Repeater.DataSourceID Property Example



datasourceid="SqlDataSource1"
runat="server">


Product ID Product Name




connectionstring=""
selectcommand="SELECT ProductID, ProductName FROM [Products] Where ProductID <= 10"
runat="server">



源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华