DataGrid 在做删除时,我们都会给用户一个友好的提示,”你是否要删除这条记录”,为了实现这个功能,我们必须在DataGrid1_ItemCreated事件中写一段代码来处理。
现在我们将这个功能封装一下,加强这个功能。
打开vs2003,新建C#的webform 的工程。然后再添加一个类库工程。
类库代码如下
using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
//功能:一个简单的组件(删除记录时弹出提示)
//时间:
//作者:
namespace ClassDataGrid
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
//从DataGrid中继承
public class DelDataGrid : DataGrid
{
//这个是是否删除的标志
private bool AllowDelFlag;
public DelDataGrid()
{
//
// TODO: 在此处添加构造函数逻辑
//
AllowDelFlag=false;
ItemCreated+=new DataGridItemEventHandler(OnItemCreated);
}
//定义一个属性
public bool DelMessage
{
get
{
return AllowDelFlag;
}
set
{
AllowDelFlag=value;
}
}
//这个事件中处理删除信息
private void OnItemCreated(Object sender,DataGridItemEventArgs e)
{
ListItemType itemType=e.Item.ItemType;
//如果AllowDelFlag为true,才能够删除。
if ((itemType==ListItemType.Item || itemType==ListItemType.AlternatingItem) && AllowDelFlag)
{
LinkButton myDeleteButton=new LinkButton();
//这里会在表单中找一个名称为mydeletebutton的LinkButton
myDeleteButton = (LinkButton)e.Item.FindControl("mydeletebutton");
myDeleteButton.Attributes.Add("onclick", "return confirm('您真的要删除第 " + (e.Item.ItemIndex+1).ToString() + " 行吗?')");
}
}
}
}
OK,编译成DLl,在Asp.Net工程中,新建表单,添加这个.net组件,会看到一个DataGrid控件,在右边的属性框中看到有DelMessage属性,默认值为false.看代码
工程代码:
Webform1.aspx
<%@ Register TagPrefix="cc1" Namespace="ClassDataGrid" Assembly="ClassDataGrid" %>
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="northwind.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W
<HTML>
<HEAD>
<title>WebForm2</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<cc1:deldatagrid id="DelDataGrid1" style="Z-INDEX: 101; LEFT: 32px; POSITION: absolute; TOP: 8px"
runat="server" DelDataGridMessage="true" AutoGenerateColumns="False" AllowPaging="True" CellPadding="4"
BackColor="White" BorderWidth="1px" BorderStyle="None" BorderColor="#CC9966" DataKeyField="employeeid"
Height="336px" Width="296px" DelMessage="True">//这里设为true,则删除时候有提示
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<Columns>
<asp:BoundColumn DataField="firstname" HeaderText="firstname">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="lastname" HeaderText="lastname">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
</asp:BoundColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:LinkButton id="mydeletebutton" runat="server" Text="删除" CommandName="Delete" CausesValidation="false"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" ForeColor="#330099" BackColor="#FFFFCC" Mode="NumericPages"></PagerStyle>
</cc1:deldatagrid></form>
</body>
</HTML>
Webform1.aspx.cs文件
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration ;
namespace northwind
{
/// <summary>
/// WebForm2 的摘要说明。
/// </summary>
public class WebForm2 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.LinkButton mydeletebutton;
protected ClassDataGrid.DelDataGrid DelDataGrid1;
static readonly String sqlConnectionString=ConfigurationSettings.AppSettings["SQLConnString"];
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!Page.IsPostBack)
{
BindGrid();
}
}
private void BindGrid()
{
SqlConnection myconnection =new SqlConnection(sqlConnectionString) ;
myconnection.Open ();
SqlDataAdapter da=new SqlDataAdapter("select * from employees" ,myconnection) ;
DataSet ds=new DataSet() ;
da.Fill (ds,"employees");
this.DelDataGrid1.DataSource=ds.Tables["employees"].DefaultView;
this.DelDataGrid1.DataBind();
}
public void DelDataGrid1_DeleteCommand(Object sender, DataGridCommandEventArgs e)
{
//这里自己处理删除的操作
}
}
}
当DelMessage属性为false的时候,删除数据不会有任何提示
当DelMessage属性为true的时候,删除数据会出现提示。