当前位置:首页 > .net(C#)开发小技巧漫谈之三:关于在Web开发中绑定数据的三种方法

.net(C#)开发小技巧漫谈之三:关于在Web开发中绑定数据的三种方法

点击次数:1157  更新日期:2010-12-29
\n

本例完全代码下载:StrongTypeDataBinding.rar

六,关于web开发中的数据绑定

在web开发中,数据绑定是所有程序员都会遇到,并且经常处理的问题。下面就这个小问题和大家探讨一下关于强类型支持在这个问题中的应用。拙劣不当之处,敬请各路高手斧正。

先look一眼这个demo截图:
 
先简单说一下,在我们的数据库有这样一个Programmer表,它有两个字段Name和WebSite,类型都是字符串。我们要处理的问题即是,把这个表从数据库中读出来并在页面上显示。简单吧,让我们开始。
现在我们是一个新手,对.Net数据绑定一无所知,于是我到msdn2搜索了一下,找到这么一个例子:

\n

<%@ page language=”C#” %>


\n

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html >
<head>
<title>Repeater.DataSourceID Property Example</title>
</head>


\n

<body>
<form id=”Form1″ runat=”server”>


\n

<h3>Repeater.DataSourceID Property Example</h3>


\n

<asp:repeater id=”Repeater1″
datasourceid=”SqlDataSource1″
runat=”server”>


\n

<headertemplate>
<table border=”1″>
<tr>
<td><b>Product ID</b></td>
<td><b>Product Name</b></td>
</tr>
</headertemplate>


\n

<itemtemplate>
<tr>
<td> <%# Eval(“ProductID”) %> </td>
<td> <%# Eval(“ProductName”) %> </td>
</tr>
</itemtemplate>


\n

<footertemplate>
</table>
</footertemplate>
</asp:repeater>


\n

<asp:sqldatasource id=”SqlDataSource1″
connectionstring=”<% ConnectionStrings:NorthWindConnection%>”
selectcommand=”SELECT ProductID, ProductName FROM [Products] Where ProductID <= 10″
runat=”server”>
</asp:sqldatasource>


\n

</form>
</body>
</html>

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


\n

<asp:Repeater ID=”ProgrammerRepeater_2″ runat=”server”>
<ItemTemplate>
<p>
Name:<%# DataBinder.Eval(Container.DataItem,”Name”) %><br />
WebSite:<a href=”<%# DataBinder.Eval(Container.DataItem,”WebSite”)%>”>
<%# DataBinder.Eval(Container.DataItem,”WebSiteName”) %></a></p>
</ItemTemplate>
<SeparatorTemplate>
<p>
——————————————–</p>
</SeparatorTemplate>
</asp:Repeater>


\n

cs代码:


\n

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


\n

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


\n

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


\n

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


\n

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


\n

}


\n

return _programmerTbl;
}
}
}


\n

为了重点说明数据绑定,从数据库读取数据改为由代码生成数据。
这便是第二种方法,编译一下,通过,没有问题。相信98%的读者都没有发现,这个程序其实是不能正常运行的。原因在呢?
看这句:


\n
<!–

\n

Code highlighting produced by Actipro CodeHighlighter (freeware)
\nhttp://www.CodeHighlighter.com/

\n

–><%# DataBinder.Eval(Container.DataItem,”WebSiteName”) %>

\n