.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

原文地址:https://www.cnblogs.com/liuning8023/p/2145153.html