找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 655|回复: 6

[【求助】] 给DataGrid添加确定删除的功能

[复制链接]
发表于 2005-10-30 18:16:08 | 显示全部楼层 |阅读模式
给DataGrid添加确定删除的功能


DataGrid的功能我想大家是知道的,我在实际的应用中遇到如下的问题,客户要求在删除之前做一次提示。类 似于windows。首先我们都知道DataGrid支持删除的功能,我们可以向DataGrid里面添加删除列就可以实现,下面我想用模板列来实现带提示的删除按钮。我们用northwind的示例数据库作为例子数据库操纵Categories表。 DataGrid的Html页的内容如下:
<aspataGrid id=\"grdTest\" style=\"Z-INDEX: 101; LEFT: 205px; POSITION: absolute; TOP: 134px\" runat=\"server\">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Button id=\"btnDelete\" runat=\"server\" Text=\"Button\" CommandName=\"Delete\"></asp:Button>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</aspataGrid>
我们只添加了一个模板列,其他的列都是在运行的时候自动生成的。
可以看出这个模板列很像删除列但是又不是删除列,我们给一个普通的Button添加了一个CommandName=\"Delete\"的属性。这是用来响应DataGrid的ItemCommand事件的!在删除列里面就是这样的!接下来就是后台代码了,代码如下所示:
private DataSet ds = new DataSet();
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!this.IsPostBack){
  string strConnection = ConfigurationSettings.AppSettings[\"sa\"].ToString();  
  SqlConnection myConnection = new SqlConnection(strConnection);
  SqlDataAdapter myAdapter = new SqlDataAdapter(\"SELECT CategoryID,CategoryName, Description FROM  Categories\",myConnection);
  myAdapter.Fill(ds);
  this.grdTest.DataSource = ds.Tables[0].DefaultView;
  this.grdTest.DataKeyField = \"CategoryID\";
  this.grdTest.DataBind();
}
}
接下来我们给模板列里面的每一个按钮都添加一个客户端的onclick事件。我想大家都应改知道Attributes属性吧!可以通过他向客户端输出客户端控件的属性比如:长度、颜色等等。但是通常情况我们使用它添加客户端事件。知道javascript的朋友肯定知道confirm了!它会弹出一个确认对话框如果确定才提交form否则就不提交,所以使用这个也是很自然的了。
private void grdTest_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
switch(e.Item.ItemType){
  case ListItemType.Item:
  case ListItemType.AlternatingItem:
  case ListItemType.EditItem:{
  Button btn = (Button)e.Item.FindControl(\"btnDelete\");
  btn.Attributes.Add(\"onclick\", \"return confirm(&#39;你是否确定删除这条记录&#39;);\");
  break;
  }
}
}
添加好这个事件里以后我们还需要添加如下的代码才能完成我们的工作:
private void grdTest_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
if(e.CommandName == \"Delete\"){
  this.DeleteRow(this.grdTest.DataKeys[e.Item.ItemIndex].ToString());
}
}
上面的事件就是我们点击DataGrid里面的控件的时候激发的事件,我们可以通过CommandName筛选出来我们想要激发的方法DeleteRow(),一下就是这个方法的代码:
private void DeleteRow(string i){
string strConnection = ConfigurationSettings.AppSettings[\"sa\"].ToString();
SqlConnection myConnection = new SqlConnection(strConnection);
SqlCommand cmd = new SqlCommand(\"DELETE FROM Categories WHERE(CategoryID = \"+i+\")\",myConnection);
myConnection.Open();
cmd.ExecuteNonQuery();
myConnection.Close();
}
上面的函数接收一个参数,此参数是当前选中行的关键字。
回复

使用道具 举报

发表于 2005-10-30 19:33:31 | 显示全部楼层
我来补充一下DataGrid资料 ,呵呵。
http://www.cnblogs.com/icesnaker/archive/2004/12/15/29017.html
回复

使用道具 举报

 楼主| 发表于 2005-10-30 19:52:51 | 显示全部楼层
老兄的资料真多,佩服~~~
回复

使用道具 举报

发表于 2005-10-30 20:18:18 | 显示全部楼层
下面是引用sddz于2005-10-30 19:52发表的:
老兄的资料真多,佩服~~~
希望sddz兄多多支持。
回复

使用道具 举报

 楼主| 发表于 2005-10-30 20:22:18 | 显示全部楼层
下面是引用风影幻想于2005-10-30 20:18发表的:

希望sddz兄多多支持。

计算机版块我常来,我最感兴趣的是代理软件方面和网络管理资料
回复

使用道具 举报

发表于 2005-10-30 20:28:31 | 显示全部楼层
下面是引用sddz于2005-10-30 20:22发表的:
计算机版块我常来,我最感兴趣的是代理软件方面和网络管理资料
那sddz兄往后多来计算机版块多多指点小弟一下哈。
回复

使用道具 举报

 楼主| 发表于 2005-10-30 20:47:08 | 显示全部楼层
下面是引用风影幻想于2005-10-30 20:28发表的:

那sddz兄往后多来计算机版块多多指点小弟一下哈。

老兄谦虚了,是我应该多来讨教才是.咱们别总是这样客气好吗.以后我肯定经常来的

以后我在文学版的文章老兄多多捧场啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-11-21 00:27 , Processed in 0.198121 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表