没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2008-01-07 10:31:42.000|阅读 1089 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
关于web开发中的数据绑定
在web开发中,数据绑定是所有程序员都会遇到,并且经常处理的问题。下面就这个小问题和大家探讨一下关于强类型支持在这个问题中的应用。拙劣不当之处,敬请各路高手斧正。
先look一眼这个demo截图:
先简单说一下,在我们的数据库有这样一个Programmer表,它有两个字段Name和WebSite,类型都是字符串。我们要处理的问题即是,把这个表从数据库中读出来并在页面上显示。简单吧,让我们开始。
现在我们是一个新手,对.Net数据绑定一无所知,于是我到msdn2搜索了一下,找到这么一个例子:
SqlDataSource
<%@ page language="C#" %>
<!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>
<body>
<form id="Form1" runat="server">
<h3>Repeater.DataSourceID Property Example</h3>
<asp:repeater id="Repeater1"
datasourceid="SqlDataSource1"
runat="server">
<headertemplate>
<table border="1">
<tr>
<td><b>Product ID</b></td>
<td><b>Product Name</b></td>
</tr>
</headertemplate>
<itemtemplate>
<tr>
<td> <%# Eval("ProductID") %> </td>
<td> <%# Eval("ProductName") %> </td>
</tr>
</itemtemplate>
<footertemplate>
</table>
</footertemplate>
</asp:repeater>
<asp:sqldatasource id="SqlDataSource1"
connectionstring="<%$ ConnectionStrings:NorthWindConnection%>"
selectcommand="SELECT ProductID, ProductName FROM [Products] Where ProductID <= 10"
runat="server">
</asp:sqldatasource>
</form>
</body>
</html>
这个例子用Repeater的DataSourceID绑定SqlDataSource,简单好用,不需要写什么cs代码,把这个例子修改一下,就可以解决我们的问题。这是第一种方法。这种方法或许只在学校课堂里存在,.Net自学者怕也不屑于学它。
第二种方法。随便在google里搜索一下,发现在页面中直接绑定数据源这种方法很幼稚,在cs中绑定数据被推荐。于是我们想了想,写了如下代码用于解决问题:
页面代码:
<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> 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%的读者都没有发现,这个程序其实是不能正常运行的。原因在呢?
看这句:
<%# DataBinder.Eval(Container.DataItem,"WebSiteName") %> WebSiteName这个字段其实是不存在的,但是编译器无法替我检测到这错误。这种错误,此时只能依赖于程序员的细心和严谨。但是经验告诉我们,这份依赖是不可取的。我们需要强类型支持来避免这种错误。
下面我们看第三种解决方法:
页面代码:
<asp:Repeater ID="ProgrammerRepeater_1" runat="server">
<ItemTemplate>
<p>
Name:<%# ((Sban.Lab.Programmer)Container.DataItem).Name%><br />
WebSite:<a href="<%# ((Sban.Lab.Programmer)Container.DataItem).WebSite%>">
<%# ((Sban.Lab.Programmer)Container.DataItem).WebSite%></a></p>
</ItemTemplate>
<SeparatorTemplate>
<p>
--------------------------------------------</p>
</SeparatorTemplate>
</asp:Repeater> cs代码:
public partial class StrongTypeDataBinding : System.Web.UI.Page
{
private IList<Programmer> _programmerList;
private static object syncObj = new object();
protected void Page_Load(object sender, EventArgs e)
{
ProgrammerRepeater_1.DataSource = ProgrammerList;
ProgrammerRepeater_1.DataBind();
}
public IList<Programmer> ProgrammerList
{
get
{
if (null == _programmerList)
{
lock (syncObj)
{
if (null == _programmerList)
{
_programmerList = new List<Programmer>();
_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,也有更灵活的编程体验。
推荐用第三种方法绑定数据。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:.NET博客园面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号