投递文章投递文章 投稿指南投稿指南 RSS订阅RSS订阅

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

来源:cnBLOGs sban 发布时间:2008-01-03 收藏 投稿 字体:【

关于web开发中的数据绑定

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

    在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%的读者都没有发现,这个程序其实是不能正常运行的。原因在呢?

最新5条评论 查看所有评论
评论内容:请自觉遵守互联网相关政策法规。
用户名: 密码: 匿名 注册
热门文章
随机推荐
About iTtang - 联系方法  - 专题列表 - 友情链接  -  高级搜索   -  帮助中心  -