zoukankan      html  css  js  c++  java
  • .Net ASP.NET 数据绑定

    事实上,将数据集绑定到 .NET 控件,就是将数据库的表或表中某个字段读到内存的某个结构里,比如 DataTable,然后把这个结构绑定到 .NET 控件。
    如果你以前使用过 C++ Builder 或是 Delphi,那么你一定记得,绑定数据库控件与一般控件是分开的,这两种控件在不同的包中。而 .NET 控件就非常灵活,它既可以作为一般的控件使用,供用户选择或输入,比如,DropDownList控件、TextBox控件等,也可以作为数据库绑定控件。一般情况,只要设置控件相应的属性就行,如,DataSource 属性、DataBind() 方法等,你自己可以试一下,所有控件的使用方法基本都是一样的,并且,无论是 BS 程序,还是 CS 程序。
    另外,将数据绑定到 .NET 控件时,这个数据的形式也是相当的灵活,它可以是 SqlDataSource 控件,ObjectDataSource 控件,DataTable 数据集,这个 DataTable 数据集既可以是从数据库中获得的,也可以是自定义的。
    多参考 MSDN,里边有现成的代码,多思考,仔细体会人家的设计思路。

     

    用数据集DataTable绑定

    <%@ Page Language="C#" %>
    
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.OracleClient" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    
        <script runat="server">
            protected void BindFromDataTable()
            {
                DataTable dt = new DataTable("TBL");
                dt.Columns.Add("ID01");
                dt.Columns.Add("ID02");
                dt.Columns.Add("ID03");
                dt.Columns.Add("ID04");
                dt.Columns.Add("STATUS");
                dt.Rows.Add(new object[] { 100, "AAA", 100, "20081114", "1" });
                dt.Rows.Add(new object[] { 101, "BBB", 101, "20081113", "0" });
                dt.AcceptChanges();
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
            protected DataTable GetDataFromGridView()
            {
                DataTable dt = new DataTable("TBL");
                dt.Columns.Add("ID01");
                dt.Columns.Add("ID02");
                dt.Columns.Add("ID03");
                dt.Columns.Add("ID04");
                dt.Columns.Add("STATUS");
                for (int i = 0; i < GridView1.Rows.Count; i++)
                {
                    GridViewRow gdv = GridView1.Rows[i];
                    DataRow row = dt.NewRow();
                    row["ID01"] = ((TextBox)gdv.FindControl("TextBox1")).Text.Trim().ToString();
                    row["ID02"] = ((TextBox)gdv.FindControl("TextBox2")).Text.Trim().ToString();
                    row["ID03"] = ((TextBox)gdv.FindControl("TextBox3")).Text.Trim().ToString();
                    row["ID04"] = ((TextBox)gdv.FindControl("TextBox4")).Text.Trim().ToString();
                    row["STATUS"] = ((DropDownList)gdv.FindControl("DropDownList1")).SelectedValue;
                    dt.Rows.Add(row);
                }
                return dt;
            }
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    BindFromDataTable();
                }
            }
            protected void Button1_Click(object sender, EventArgs e)
            {
                DataTable dt = GetDataFromGridView();
                DataRow row = dt.NewRow();
                row["STATUS"] = "1";
                dt.Rows.Add(row);
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
            protected void Button2_Click(object sender, EventArgs e)
            {
                string connStr = "Data Source=ora9; uid=scott; pwd=tiger; unicode=true";
                string SqlStr = @"SELECT id01,
                                id02, 
                                id03,
                                id04,
                                STATUS
                            FROM TBL";
                System.Data.OracleClient.OracleConnection conn = new System.Data.OracleClient.OracleConnection(connStr);
                System.Data.OracleClient.OracleDataAdapter da = new System.Data.OracleClient.OracleDataAdapter();
                da.SelectCommand = new System.Data.OracleClient.OracleCommand(SqlStr, conn);
                System.Data.OracleClient.OracleCommandBuilder bld = new System.Data.OracleClient.OracleCommandBuilder(da);
                conn.Open();
                DataTable dt = new DataTable();
                da.Fill(dt);
                dt.Clear();
                dt = GetDataFromGridView();
                da.Update(dt);
                conn.Close();
            }
        </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:Button ID="Button1" runat="server" Text="添加空行" OnClick="Button1_Click" />
        <asp:Button ID="Button2" runat="server" Text="保存所有" OnClick="Button2_Click" />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="403px">
            <Columns>
                <asp:TemplateField HeaderText="ID01">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ID01")%>'>
                        </asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="ID02">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ID02")%>'>
                        </asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="ID03">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ID03")%>'>
                        </asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="ID04">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox4" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ID04")%>'>
                        </asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="STATUS">
                    <ItemTemplate>
                        <asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# DataBinder.Eval(Container.DataItem, "STATUS")%>'>
                            <asp:ListItem Value="1">有效</asp:ListItem>
                            <asp:ListItem Value="0">无效</asp:ListItem>
                        </asp:DropDownList>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        </form>
    </body>
    </html>
    
    说明

    (1) 数据集绑定控件后,每次数据集发生变化,都要重新绑定,以便把变化反应出来;

    (2) 用DataTable或DataSet绑定本质上是一样的;

    (3) BindFromDataTable()函数是生成一个五列的表TBL,并添加两条记录,绑定数据到GridView控件;

    (4) GetDataFromGridView()函数是从GridView控件获得数据,并生成一个表。

    用ObjectDataSource控件绑定

    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" AutoGenerateColumns="true"
            DataKeyNames="EMPNO">
        </asp:GridView>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetEmp"
            TypeName="OraEmp"></asp:ObjectDataSource>
        </form>
    </body>
    </html>
    

    自定义类

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.OracleClient;
    using System.ComponentModel;
    
    public class OraEmp
    {
        public OraEmp()
        { }
        [DataObjectMethod(DataObjectMethodType.Select, true)]
        public DataTable GetEmp()
        {
            string connStr = "Data Source=ora9; uid=scott; pwd=tiger; unicode=true";
            string sqlStr = "SELECT * FROM EMP";
            OracleDataAdapter da = new OracleDataAdapter(sqlStr, connStr);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }
    }
    说明

    (1) 本例使用ObjectDataSource控件进行绑定,这个控件比SqlDataSource控件更加抽象;

    (2) 首先自定义一个类OraEmp,添加public DataTable GetEmp()方法,注意返回类型为DataTable;

    (3) 另外在类OraEmp中,为了使用ObjectDataSource,需要添加[DataObjectMethod(DataObjectMethodType.Select, true)]语句,此语句需要System.ComponentModel命名控件;

    (4) 最后设置ObjectDataSource控件的SelectMethod="GetEmp"和TypeName="OraEmp"属性。

    用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 xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
            AutoGenerateColumns="False" DataKeyNames="username" DataSourceID="SqlDataSource1"
            PageSize="3">
            <Columns>
                <asp:BoundField DataField="username" HeaderText="用户名" SortExpression="username" ReadOnly="true" />
                <asp:BoundField DataField="userpwd" HeaderText="密码" SortExpression="userpwd" />
                <asp:CommandField ShowEditButton="True" />
                <asp:CommandField ShowDeleteButton="True" />
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=ora9;User ID=scott;Password=tiger;Persist Security Info=True"
            ProviderName="System.Data.OracleClient" SelectCommand="SELECT USERNAME, USERPWD FROM USERS"
            UpdateCommand="UPDATE USERS SET USERPWD =:userpwd where USERNAME = :username"
            DeleteCommand="DELETE FROM USERS where USERNAME =:username">
            <UpdateParameters>
                <asp:ControlParameter ControlID="GridView1" DefaultValue="username" Name="username"
                    PropertyName="SelectedValue" />
                <asp:ControlParameter ControlID="GridView1" DefaultValue="userpwd" Name="userpwd"
                    PropertyName="SelectedValue" />
            </UpdateParameters>
            <DeleteParameters>
                <asp:ControlParameter ControlID="GridView1" DefaultValue="" Name="username" PropertyName="SelectedValue" />
            </DeleteParameters>
        </asp:SqlDataSource>
        </form>
    </body>
    </html>
    
    说明

    (1) 数据集绑定到控件有多种方式;

    (2) 一是用像SqlDataSource控件、AccessDataSource控件的方式绑定;

    (3) 二是用更抽象的控件,如ObjectDataSource控件绑定;

    (4) 三是用DataTable或DataSet数据集绑定;

    (5) 这几种方式的区别是,第一种不太灵活,所以常用在小型项目中,第二种方式本人在使用第三方控件时看到过,如SmartGridView控件,第三种方式比较灵活,很常用;

    (6) 本例使用的是第一种方式,所有代码都在前台页面,后台无代码,实现数据库的编辑、更新、删除。

    例二

    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
            PageSize="3" AutoGenerateColumns="true" DataKeyNames="username" DataSourceID="SqlDataSource1"
            AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" AutoGenerateSelectButton="True">
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=ora9;User ID=scott;Password=tiger;Persist Security Info=True"
            ProviderName="System.Data.OracleClient" SelectCommand="SELECT USERNAME, USERPWD FROM USERS"
            UpdateCommand="UPDATE USERS SET USERPWD =:userpwd where USERNAME = :username"
            DeleteCommand="DELETE FROM USERS where USERNAME =:username">
            <UpdateParameters>
                <asp:ControlParameter ControlID="GridView1" DefaultValue="username" Name="username"
                    PropertyName="SelectedValue" />
                <asp:ControlParameter ControlID="GridView1" DefaultValue="userpwd" Name="userpwd"
                    PropertyName="SelectedValue" />
            </UpdateParameters>
            <DeleteParameters>
                <asp:ControlParameter ControlID="GridView1" DefaultValue="" Name="username" PropertyName="SelectedValue" />
            </DeleteParameters>
        </asp:SqlDataSource>
        </form>
    </body>
    </html>
    
    说明

    (1) 数据集绑定到控件有多种方式;

    (2) 一是用像SqlDataSource控件、AccessDataSource控件进行绑定;

    (3) 二是用更抽象的控件,如ObjectDataSource控件绑定;

    (4) 三是用DataTable或DataSet绑定;

    (5) 这几种方式的区别是,第一种不太灵活,所以常用在小型项目中,第二种方式本人在使用第三方控件时见过,如SmartGridView控件,第三种方式比较灵活,很常用;

    (6) 本例使用的也是第一种方式,与前一篇的区别是,数据列是自动生成的。

    下载 Demo

  • 相关阅读:
    1.淡入淡出效果js原生代码2.缓冲运动
    php 图片加水印插件
    php redis使用 常用方法 | Windows环境下安装Redis | Windows下php安装redis扩展(详解版)
    Windows下安装使用workman简单实例
    极简生成excel方法;excel表导入数据库
    php 生成表单 | url串禁止转义并解决中文字符乱码
    图片上传预览并保存图片 | 多图上传预览并保存图片 | 树状结构(jquery.treeview.js)
    php Rsa签名算法
    php 正则表达式 1.字符串中提取带小数点的数字 2.判断字符串中是否包含关键字 3.统计二维数组中某个字段值出现的次数
    虚拟主机部署tp项目,在.htaccess文件中隐藏index.php
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2145153.html
Copyright © 2011-2022 走看看