利用数据源控件在Repeater中实现删除数据

     数据源控件是在ADO.NET的基础上进行封装,以达到快速开发的目地。.net提供的数据控件分为数据源控件和数据绑定控件,数据源控件主要负责数据的连接、数据的增删改查;数据绑定控件主要负责数据的显示。

常用数据源控件:

控件名称

说明

SqlDataSource

可以连接到 ADO.NET 支持的任何 SQL 数据库

AccessDataSource

连接到使用 Microsoft Office 创建的 Access 数据库

ObjectDataSource

连接到应用程序的 Bin 或 App_Code 目录中的中间层业务对象或数据集

XmlDataSource

连接到 XML 文件

SitemapDataSource

连接到此应用程序的站点导航树(要求应用程序根目录处有一个有效的站点地图文件,默认的文件名为“Web.sitemap”),站点地图文件其实也是一个XML文件

LINQDataSource

.NET 3.0新增,可以访问各种类型的数据,包括数据库和XML文件。与C#/VB.NET等.NET语言直接集成

常用数据绑定控件:

控件名称

说明

GridView

以表格的方式显示和编辑数据

DetailsView

一次显示、编辑、插入或删除一条记录。默认情况下,DetailsView 控件将记录的每个字段显示在它自己的一行内

FormView

FormView控件与DetailsView控件相似,一次也只能显示或编辑一条记录。FormView需要给其设定一个模板

DataList

控件可以用某种用户指定的格式来显示数据(比如分列显示),这种格式由模板和样式进行定义

Repeater

Repeater控件没有包含内置的布局或样式,需要由Web开发者指定所有的用于显示数据的内部控件和显示样式

ListView

ASP.NET   3.5新增,以嵌套容器模板和占位符的方式提供灵活的数据显示模式

      在数据绑定控件中,GridView等一些控件有自己模版,并且封装了删除、更新还有分页的方法,可以通过一些配置来操作数据源。但是Repeater数据绑定控件没有自己的模版,对数据的操作只有一个Repeater_ItemCommand一个事件方法。因此怎么在Repeater_ItemCommand方法中利用数据源控件删除数据困扰了我一下午,要解决这个问题,我们首先来看数据源控件的代码:

1 <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
2        ConnectionString="<%$ ConnectionStrings:SqlDataSourceTestConnectionString %>" 
3        DeleteCommand="DELETE FROM test1 WHERE (id = @id)">
4         <DeleteParameters>
5           <asp:ControlParameter ControlID="GridView1" Name="id" 
6                PropertyName="SelectedValue" />
7         </DeleteParameters>
8     </asp:SqlDataSource>

同样的目地直接在ADO.NET里面的操作如下:

 1 Public bool del(int id)
2 { 3 bool flag = false; 4 SqlConnection conn = new SqlConnection(“连接字符串”); 5 SqlCommand cmd = new SqlCommand(“DELETE FROM test1 WHERE id=”+id+””,conn); 6 Conn.open(); 7 int i= cmd.ExcuteNonQuery(); 8 if(i!=0) 9 { 10 flag = true; 11 } 12 return flag; 13 }

下面我们来分析数据源控件和ADO.NET的对应关系:

从数据源控件代码中我们可以很清楚的看到第1行首先声明了一个<asp:SqlDataSource>并且为其设置了其ID="SqlDataSource1"可以理解这句话的意思是声明一个名为SqlDataSource1的SqlConnection对象,如:

SqlConnection SqlDataSource1;

第二行设置属性ConnectionString="<%$ ConnectionStrings:SqlDataSourceTestConnectionString %

ConnectionString是在web.config中配置好了的

    <connectionStrings>
  <add name="SqlDataSourceTestConnectionString" connectionString="Data Source=WS-I-MYRONE-01\SQLEXPRESS;Initial Catalog=SqlDataSourceTest;Persist Security Info=True;User ID=sa;Password=**************"
   providerName="System.Data.SqlClient" />
 </connectionStrings>

所以第2行的意思是将SqlDataSource1对象实例化,如:

SqlDataSource1 = new SqlConnection(“WS-I-MYRONE-01\SQLEXPRESS;Initial Catalog=SqlDataSourceTest;Persist Security Info=True;User ID=sa;Password=**************”);

第3行DeleteCommand="DELETE FROM test1 WHERE (id = @id)"可以理解为声明并实例化一个SqlCommand对象,如:

SqlCommand cmd = new SqlCommand(“DELETE FROM test1 WHERE id = “+id+””);

第4行到第7行设置DeleteParameters属性,可以理解为执行预处理给SqlCommand赋值并执行SqlCommand。

第5行到第7行是设置DeleteParameters的赋值方式、,SqlDataSources设置参数的方法如下:

参数类型

说明

ControlParameter

将参数设置为 ASP.NET 网页中的 Control 的属性值。 使用 ControlID 属性指定 Control。 使用 ControlParameter 对象的 PropertyName 属性指定提供参数值的属性的名称。

从 Control 派生的某些控件将定义 ControlValuePropertyAttribute,从而确定从中检索控件值的默认属性。 只要没有显式设置 PropertyName 属性,就会使用默认属性。 ControlValuePropertyAttribute 应用于以下控件属性:

  •   CalendarSelectedDate
  •   CheckBoxChecked
  •   DetailsViewSelectedValue
  •   FileUploadFileBytes
  •   GridViewSelectedValue
  •   LabelText
  •   TextBoxText
  •   TreeViewSelectedValue

CookieParameter

将参数设置为 HttpCookie 对象的值。 使用 CookieName 属性指定 HttpCookie 对象的名称。 如果指定的 HttpCookie 对象不S存在,则将使用 DefaultValue 属性的值作为参数值。

                                                                      注意

仅支持单值 Cookie。

FormParameter

将参数设置为 HTML 窗体字段的值。 使用 FormField 属性指定 HTML 窗体字段的名称。 如果指定的 HTML 窗体字段值不存在,则将使用 DefaultValue 属性的值作为参数值。

ProfileParameter

将参数设置为当前用户配置文件 (Profile) 中的属性的值。 使用 PropertyName 属性指定配置文件属性的名称。 如果指定的配置文件属性不存在,则将使用 DefaultValue 属性的值作为参数值。

有关用户配置文件的信息,请参见 ASP.NET 配置文件属性概述。

QueryStringParameter

将参数设置为 QueryString 字段的值。 使用 QueryStringField 属性指定 QueryString 字段的名称。 如果指定的 QueryString 字段不存在,则将使用 DefaultValue 属性的值作为参数值。

SessionParameter

将参数设置为 Session 对象的值。 使用 SessionField 属性指定 Session 对象的名称。 如果指定的 Session 对象不存在,则将使用 DefaultValue 属性的值作为参数值。

理清楚SqlDataSource与ADO.NET的对应关系后,下面就是在利用数据源控件在Repeater中实现删除数据

代码如下:

前台代码:

View Code
 1 <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" 
 2         onitemcommand="Repeater1_ItemCommand"  DataMember="DefaultView">
 3         <HeaderTemplate>
 4             <table>
 5                 <tr>
 6                     <td>
 7                        name <asp:TextBox AutoPostBack="true" ID="name" runat="server"></asp:TextBox>
 8                     </td>
 9                     <td>
10                    pwd <asp:TextBox ID="pwd" runat="server"></asp:TextBox>
11                     </td>
12                     <td>
13                         <asp:Button ID="add" CommandName="add" CommandArgument="1"  runat="server" Text="add" />
14                     </td>
15                 </tr>
16             </table>
17         </HeaderTemplate>
18          <ItemTemplate>
19             <table border="1">
20                 <tr>
21                     <td>
22                       <asp:Label ID="Label2" runat="server" Text='<%#Eval("name")%>'/>
23                      </td>
24                     <td>
25                          <asp:Label ID="Label3" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "pwd")%>'/>
26                     </td>
27                     <td> 
28                         <asp:Button Text="delete" ID="b1"  CommandArgument='<%#Eval("id")%>'  CommandName="del" runat="server"/>
29                     </td>
30                 </tr>
31             </table>
32          </ItemTemplate>
33     </asp:Repeater>

后台事件处理:

 1 protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
 2     {
 3         if(e.CommandName=="del")
 4         {
 5             SqlDataSource1.DeleteCommand = "DELETE FROM test1 where id=" + e.CommandArgument.ToString();
 6             SqlDataSource1.Delete();
 7         }
 8         if (e.CommandName == "add")
 9         {
10             TextBox1.Text = "add"+a;
11         }
12     }

删除事件是通过<asp:Button Text="delete" ID="b1"  CommandArgument='<%#Eval("id")%>'  CommandName="del" runat="server"/>来触发的

在后台代码e.CommandName是为了得到按钮的CommandName属性的值,e. CommandArgument是为了得到CommandArgument的值。

然后通过SqlDataSource1.DeleteCommand = "DELETE FROM test1 where id=" + e.CommandArgument.ToString();

设置删除的Sql语句通过调用SqlDataSource1.Delete()方法来执行删除事件。

posted @ 2012-10-06 19:45  季小鱼  阅读(989)  评论(0编辑  收藏  举报