数据库绑定控件

数据绑定的方式:
使用数据绑定语法,可以将控件属性值绑定到数据,并指定值以对数据进行检索、更新、删除和插入操作。
数据绑定表达式包含在<%#和%>分隔符之内,可以配合使用Eval、Bind和XPath函数。
Eval函数用于定义单向(只读)绑定。
Bind函数用于定义双向(可更新)绑定。
除了通过在数据绑定表达式中调用Eval和Bind方法执行数据绑定外,还可以调用<%#和%>分隔符之内的任何公共范围代码,以在页面处理过程中执行该代码并返回一个值。
(1)GridView控件:
GridView的Columns集合可添加对象包括:
 BoundField、CheckBoxField、ImageField、HyperLinkField、CommandField、ButtonField、emplateField。
我们可以直接通过 Gridview1.DataSource = dt; Gridview1.DataBind();绑定数据。
GridView的排序与分页:
若要在GridView中启用排序UI,选中智能标记菜单中的“启用排序”,或者在HTML代码将AllowSorting属性设置为true。
设置列字段与GridView控件的SortExpression 属性关联,也即SortExpression被设置为与GridView的某列关联的单个字段名称。
GridView控件还通过选中智能标记中的“启用分页”,或者在HTML代码中将AllowPaging属性设置为true。
GridView能够对从数据源返回的任何支持ICollectio在设置分页后,还可以通过属性窗口
设置GridView控件的PageSize(每页显示大小)
可以设置PagerStyle中的HorizontalAlign为Center来使页码标签显示在脚注的中间
通过分别配置PagerStyle和PagerSettings属性,还可以自定义页导航的样式和设置。
PagerStyle确定页导航的外观和风格,而PagerSettings确定要使用的分页类型(数字或“Next/Previous”(下一页/上一页)按钮)、页导航位置和相关选项。
n接口的值自动进行分页 。
当然我们最后还要通过PageIndexChanging事件去触发。
  protected void Gridview1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        Gridview1.PageIndex = e.NewPageIndex;
        //Gridview1.DataBind();
        MyBind();
    }
下面是aspx页面的代码:
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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">
    <div>
    <a href="AddMessage.aspx">添加留言</a>
    <asp:gridview ID="Gridview1" runat="server" AutoGenerateColumns="False"
            onrowcancelingedit="Gridview1_RowCancelingEdit"
            onrowdeleting="Gridview1_RowDeleting" onrowediting="Gridview1_RowEditing"
            onrowupdating="Gridview1_RowUpdating" AllowPaging="True"
            onpageindexchanging="Gridview1_PageIndexChanging"
            onselectedindexchanging="Gridview1_SelectedIndexChanging" PageSize="2">
        <Columns>
            <asp:TemplateField HeaderText="编号">
            <EditItemTemplate>
                   
                    <asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("messageid") %>' />
                </EditItemTemplate>
                <ItemTemplate>
                    <%#Eval("messageid") %>
                    <asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("messageid") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="标题">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("mtitle") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <%#Eval("mtitle") %>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="留言内容">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("mcontent") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <%#Eval("mcontent") %>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="留言时间">
                <EditItemTemplate>
                 <%-- <asp:TextBox ID="TextBox3" runat="server" Text='<%#Eval("mtime") %>'></asp:TextBox>--%>
                </EditItemTemplate>
                <ItemTemplate>
                    <%#Eval("mtime") %>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField HeaderText="编辑" ShowEditButton="True" />
            <asp:CommandField HeaderText="删除" ShowDeleteButton="True" />
        </Columns>
        </asp:gridview>
    </div>
    </form>
</body>
</html>
  下面是GridView控件的编辑和删除代码:
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            MyBind();
        }
    }
  
    public void MyBind()
        {
            Message mess = new Message();
            OpMessage op = new OpMessage();
            DataTable dt = op.Select();
            Gridview1.DataSource = dt;
            Gridview1.DataBind();
        }
    protected void Gridview1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        Gridview1.EditIndex = e.NewEditIndex;
        MyBind();
    }
    protected void Gridview1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        TextBox t1 = Gridview1.Rows[e.RowIndex].FindControl("Textbox1") as TextBox;
        TextBox t2 = Gridview1.Rows[e.RowIndex].FindControl("Textbox2") as TextBox;
        //TextBox t3 = Gridview1.Rows[e.RowIndex].FindControl("Textbox3") as TextBox;
        HiddenField h1 = Gridview1.Rows[e.RowIndex].FindControl("HiddenField1") as HiddenField;
        Message me = new Message();
        OpMessage opm = new OpMessage();
        me.Title = t1.Text;
        me.Content = t2.Text;
        me.Time = DateTime.Now;
        opm.GetData(me);
        opm.Update(int.Parse(h1.Value));
        Gridview1.EditIndex = -1;
        MyBind();
      
    }
    protected void Gridview1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
       
        OpMessage opm = new OpMessage();
        HiddenField h1 = Gridview1.Rows[e.RowIndex].FindControl("HiddenField1") as HiddenField;
        opm.Delete(int.Parse(h1.Value));
        MyBind();
    }
    protected void Gridview1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        Gridview1.EditIndex = -1;
        MyBind();
    }
    protected void Gridview1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        Gridview1.PageIndex = e.NewSelectedIndex;
        //Gridview1.DataBind();
        MyBind();
    }
    protected void Gridview1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        Gridview1.PageIndex = e.NewPageIndex;
        //Gridview1.DataBind();
        MyBind();
    }

(2) Datalist控件:
DataList控件支持的模板类型
     模板属性  说明
ItemTemplate  可包含一些HTML元素和控件,将为数据源中的每一行呈现一次这些HTML元素和控件。
AlternatingItemTemplate  可包含一些HTML元素和控件,将为数据源中的每两行呈现一次这些 HTML元素和控件。通常,开发人员可以使用此模板来为交替行创建不同的外观,例如指定一个与在ItemTemplate属性中指定的颜色不同的背景色。
SelectedItemTemplate  可包含一些元素,当用户选择DataList控件中的某一项时将呈现这些元素。通常,开发人员可以使用此模板来通过不同的背景色或字体颜色直观地区分选定的行。还可以通过显示数据源中的其他字段来展开该项。
EditItemTemplate  指定当某项处于编辑模式中时的布局。此模板通常包含一些编辑控件,如TextBox控件。
HeaderTemplate 和FooterTemplate 包含在列表的开始和结束处分别呈现的文本和控件。
SeparatorTemplate 包含在每项之间呈现的元素。典型的示例可能是一条直线(使用HR元素)。

响应列表项中的按钮单击而引发。这些事件旨在帮助开发人员响应DataList控件的最常用功能。支持该类型的四个事件:
 ? EditCommand
 ? DeleteCommand
 ? UpdateCommand
 ? CancelCommand
若要引发这些事件,可将Button、LinkButton或ImageButton控件添加到DataList控件中的模板中,并将这些按钮的CommandName属性设置为某个关键字,如edit、delete、update或cancel。当用户单击项中的某个按钮时,就会向该按钮的容器(DataList控件)发送事件。按钮具体引发哪个事件将取决于所单击按钮的CommandName属性的值。例如,如果某个按钮的CommandName属性设置为edit,则单击该按钮时将引发EditCommand事件。如果CommandName属性设置为delete,则单击该按钮将引发DeleteCommand事件,依此类推。
aspx页面代码:
<form id="form1" runat="server">
    <div>
   
    <asp:DataList ID="DataList1" runat="server" RepeatColumns="2"
            oncancelcommand="DataList1_CancelCommand" oneditcommand="DataList1_EditCommand"
            onitemcommand="DataList1_ItemCommand"
            onupdatecommand="DataList1_UpdateCommand"
            ondeletecommand="DataList1_DeleteCommand">
        <ItemTemplate>
        <table><tr><td><%#Eval("mtitle") %>
            <asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("messageid") %>'></asp:HiddenField>
            <asp:Button ID="Button2" runat="server" Text="编辑" CommandName="edit" />
            <asp:Button ID="Button4" runat="server" Text="删除" CommandName="delete" />
            </td></tr>
            <td><%#Eval("mcontent") %></td>
            <td><%#Eval("mtime") %></td>
        </table>
           
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("mtitle") %>'></asp:TextBox>
            <asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("mcontent") %>'></asp:TextBox>
            <asp:Button ID="Button1" runat="server" Text="更新"  CommandName="update" CommandArgument=""/>
            <asp:Button ID="Button3" runat="server" Text="取消"  CommandName="cancel"/>
        <asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("messageid") %>'>
        </asp:HiddenField>
        </EditItemTemplate>
        <SelectedItemTemplate>
           
          
       
        </SelectedItemTemplate>
    </asp:DataList>
    </div>
    </form>
(3)Repeater控件:
Repeater服务器控件类似于DataList服务器控件,通过创建模板为Repeater服务器控件提供布局。
如果未定义模板,或者如果模板都不包含元素,则该控件不会显示在页面上。
Repeater服务器控件能够支持的模板有ItemTemplate、AlternatingItemTemplate、HeaderTemplate、FooterTemplate、SeparatorTemplate。
Repeater控件的使用类似于DataList控件。Repeater控件由于布局由自己定义 所以一般会在网站的前台使用。而GridView控件则方便数据库的管理,用于后台数据的呈现常在后台页面使用。
(4)DetailsView控件:
DetailsView控件一次呈现一条表格形式的记录,并提供翻阅多条记录以及插入、更新、和删除记录的功能。它常用在主/详细信息方案中。如主控件GridView
(5)FormView控件:
FormView控件与DetailsView控件类似,它一次呈现数据源中的一条记录,并并提供翻阅多条记录以及插入、更新、和删除记录的功能。这两个控件都不常用。

一、常用控件简介在数据库开发实践中,有一些功能反复使用,如一些字段的值,常常就那几个,这时,要程序记住这些值可提高用户的工作效率,这类控件有两个TCmbrec和TDBCmbrec,分别继承TCombox和TDBCombox,重载DblClick和DoEnter过程,并加了Filename、Section、Field和Caption属性。其使用方法参见“三、控件的使用”的说明。对于某些数据表来说,字段数很多,打开浏览时,屏幕放不下,需要用横向滚动条来移动查看,为了清楚浏览数据记录,希望在滚动过程中,某些字段不要移动;其二,如果数据表字段很少且比较规范,希望在数据表表格上编辑数据,编辑过程中每个字段都具有上述TDBCmbrec的功能;其三,对于综合查询或在一个画面上一个数据源对应于几个数据显示时,希望能够自动翻译其字段名。这些功能需求可使用TRxDBGrid和Tdbgrdrec控件来实现,都继承于TDBGrid控件,前者实现DBGrid的固定列显示、自动翻译和字段格编辑;后者实现字段格编辑。其中,TRxDBGrid增加了Filename、Section、Field、TranslateFileName、FixedCols等属性,重载DblClick和DoEnter等过程;Tdbgrdrec增加了Filename、Section、Field属性,重载DblClick和DoEnter过程。二、控件安装 上面介绍的控件,写在两个.pas文件中,DBCtrl.pas只包含TRxDBGrid控件;DBAdvanceComponent.pas包括Tcmbrec、TDBCmbrec、Tdbgrdrec等控件。安装步骤为:·第一步,打开Delphi,然后选择“Component”|“Install Components”菜单项;·第二步,在“Install Component”对话框的“Unit file name”栏中,使用“Browse”按钮将控件文件加进来;·第三步,单击“OK”按钮;·第四步,在弹出的“Confirm”对话框中,单击“Yes”按钮,安装该控件文件;·第五步,在“Information”对话框,单击“OK”按钮;·重复第二至第五步,安装所有需要的控件。安装完成后,在控件面板上出现新的标签“DBAdvance”,上面有新安装的控件。之所以不写成包,是为了方便以后扩展和适应Delphi版本的更新。三、控件的使用1.Tcmbrec、TDBCmbrec和Tdbgrdrec控件 增加的保存内容放在当前目录下的“lst”子目录的Ini文件里,文件名为FileName属性的内容,新增属性Section让用户设置Init文件中“[ ]”段名,新增属性Field让用户设置数据表字段名。当然在Tdbgrdrec控件中,Field字段可不设置,控件自动根据当前选取的字段设置。子目录“lst”,控件可自动创建。2.TRxDBGrid控件 (1)FileName,Section,Field属性设置同上“1”; (2)FixedCols属性用来设置固定列数,从第一列到第FixedCols列; (3)TranslateFileName属性用来设置翻译文件名,放在“txt”子目录下,是文本文件,文件格式为:字段英文名@字段中文名。特别说明:TRxDBGrid控件来源于著名的Rxlib2.75相关的控件,本人加了字段自动翻译的功能,该功能在综合查询时特别有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值