CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

还是DataGrid的 删除问题,在线!解决马上给分

楼主carl13720(蒲卡)2006-04-24 11:12:12 在 .NET技术 / ASP.NET 提问

下面代码  
  private   void   DataGrid1_DeleteCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
  string   delCmd="delete   from   people   where   ID="+DataGrid1.DataKeys   [(int)e.Item   .ItemIndex].ToString   ();  
  sqlCommand1.CommandText   =delCmd;  
  sqlCommand1.Connection   .Open   ();  
  sqlCommand1.ExecuteNonQuery   ();  
  sqlCommand1.Connection   .Close   ();  
  sqlDataAdapter1.Fill   (myDataSet1);  
  DataGrid1.EditItemIndex   =-1;  
  DataGrid1.DataBind   ();  
  }  
  点“删除”,页面还是那样啊,再点一次,才给删除了,或者,翻到另一页,再回来,就给删除了,  
  如果只点“删除”,页面没有任何变化,加急!!!! 问题点数:20、回复次数:49Top

1 楼7712190(25458848@163.com)回复于 2006-04-24 11:16:47 得分 0

把   帮顶   数据的那个函数或者代码   方在    
  if(!IsPostBack)  
  {  
  。。  
  }  
  里面Top

2 楼carl13720(蒲卡)回复于 2006-04-24 11:28:05 得分 0

把哪个代码放在if(!IsPostBack)  
  {  
  。。  
  }  
  里面  
  ??????Top

3 楼carl13720(蒲卡)回复于 2006-04-24 11:31:56 得分 0

我是这么写的  
  if(!IsPostBack)  
  {  
  sqlDataAdapter1.Fill   (myDataSet1);  
  DataGrid1.DataBind   ();  
   
  }Top

4 楼carl13720(蒲卡)回复于 2006-04-24 11:43:42 得分 0

有人吗???????  
  顶一下,Top

5 楼peng_0_0_1983(这头猪很瘦)回复于 2006-04-24 11:46:27 得分 0

删除完后,重新绑定一下数据源!DataGrid1.DataBind   ();  
  Top

6 楼peng_0_0_1983(这头猪很瘦)回复于 2006-04-24 11:47:43 得分 0

比如你的  
  delete()  
  {  
            删除函数();  
            重新绑定();  
  }Top

7 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 11:52:29 得分 12

sqlCommand1.Connection   .Close   ();  
  sqlDataAdapter1.Fill   (myDataSet1);  
  DataGrid1.EditItemIndex   =-1;  
  DataGrid1.DataBind   ();  
   
  你的删除代码里面连个重新给datasouce的语句都没有!!!  
  datagrdi1.datasource   =   myDataSet1;这样吧?Top

8 楼carl13720(蒲卡)回复于 2006-04-24 11:52:51 得分 0

我绑定了啊,  
  private   void   DataGrid1_DeleteCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
  string   delCmd="delete   from   people   where   ID="+DataGrid1.DataKeys   [(int)e.Item   .ItemIndex].ToString   ();  
  sqlCommand1.CommandText   =delCmd;  
  sqlCommand1.Connection   .Open   ();  
  sqlCommand1.ExecuteNonQuery   ();  
  sqlCommand1.Connection   .Close   ();  
                                                        //-----------------------------------------------  
  sqlDataAdapter1.Fill   (myDataSet1);  
  DataGrid1.EditItemIndex   =-1;  
  DataGrid1.DataBind   ();  
                                                        //--------------------------------------------  
  }  
  Top

9 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 11:55:28 得分 0

sqlCommand1.Connection   .Open   ();  
  sqlCommand1.ExecuteNonQuery   ();  
  sqlCommand1.Connection   .Close   ();  
  这段语句应该加在try里面!然后得有个处理异常的代码!!!  
  Top

10 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 11:57:10 得分 0

sqlDataAdapter1.Fill   (myDataSet1);  
  DataGrid1.EditItemIndex   =-1;  
  DataGrid1.DataBind   ();  
  你这段代码绑定的还是原来的数据源啊!那么。。。。  
  你的datagrid绑定的数据源没有更新啊!!!Top

11 楼carl13720(蒲卡)回复于 2006-04-24 12:00:19 得分 0

//---------------------------------------------------------------  
  jimu8130,你的删除代码里面连个重新给datasouce的语句都没有!!!  
  datagrdi1.datasource   =   myDataSet1;这样吧?  
  //-------------------------------------------------  
  我试了,不行..........:(  
  5555555555555  
  Top

12 楼carl13720(蒲卡)回复于 2006-04-24 12:02:29 得分 0

没有异常出现,点一次"删除",页面没有反映,但是,数据库中,已经删除了,  
  你再点一次"删除"就给删除了,  
  没有异常出现.  
  帮忙啊..............Top

13 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 12:02:56 得分 0

datagrdi1???  
  呵呵,  
  sqlDataAdapter1.Fill   (myDataSet1);  
   
  DataGrid1.EditItemIndex   =-1;  
  DataGrid1.DataSource   =   重新查询数据库后得到的数据源;  
  DataGrid1.DataBind   ();Top

14 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 12:04:08 得分 0

很明显你说的情况就是没有重新查询数据库得到新的数据源进而绑定datagridTop

15 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 12:04:52 得分 0

建议你单步调试下看看运行流程!Top

16 楼xu8512(突然很想谈恋爱)回复于 2006-04-24 12:06:35 得分 0

删除后重新绑定Top

17 楼carl13720(蒲卡)回复于 2006-04-24 12:09:18 得分 0

说的详细点好么>  
  jimu8130//------------------------------------  
  sqlDataAdapter1.Fill   (myDataSet1);  
   
  DataGrid1.EditItemIndex   =-1;  
  DataGrid1.DataSource   =   重新查询数据库后得到的数据源;  
  DataGrid1.DataBind   ();  
  //---------------------------------------  
   
  重新查询数据库后得到的数据源; 是什么?????????应该怎么写啊?  
  Top

18 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 12:15:16 得分 0

我说的够清楚了!  
  重新查询数据库得到的数据源就是让你在查询下数据库的相应表(执行sql语句)得到一个dataset或者dataview或者datareader然后和datagrid绑定!Top

19 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 12:17:00 得分 0

重新查询就是让你再次查询数据库,因为你的数据库因为你的删除操作改变了,但是与此同时,你代码中的数据源没有改变就进行了改变当然看不出效果Top

20 楼carl13720(蒲卡)回复于 2006-04-24 12:32:11 得分 0

我又重新查询了,还是不行..............  
  我晕了Top

21 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 12:38:55 得分 0

贴出你的删除事件还有page_load事件的代码!!Top

22 楼carl13720(蒲卡)回复于 2006-04-24 12:46:26 得分 0

private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  //   在此处放置用户代码以初始化页面  
   
   
  sqlDataAdapter1.Fill   (myDataSet1);  
  if(!IsPostBack)  
  {  
  BindGrid("people");  
   
  }  
  //---------------------------------------  
  private   void   BindGrid(string   tablename)  
  {  
  //根据参数tablename,决定访问的表  
  string   strCommand="select   *   from   "+tablename;  
  SqlDataAdapter   da=new   SqlDataAdapter   (strCommand,sqlConnection1);  
  DataSet   ds=new   DataSet   ();  
  da.Fill   (ds,"people");  
  DataGrid1.DataSource   =ds.Tables   ["people"].DefaultView   ;  
  DataGrid1.DataBind   ();  
  }  
  //--------------------------------------------  
  private   void   DataGrid1_DeleteCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
  string   delCmd="delete   from   people   where   ID="+DataGrid1.DataKeys   [(int)e.Item   .ItemIndex].ToString   ();  
  sqlCommand1.CommandText   =delCmd;  
  sqlCommand1.Connection   .Open   ();  
  sqlCommand1.ExecuteNonQuery   ();  
  sqlCommand1.Connection   .Close   ();  
  sqlDataAdapter1.Fill   (myDataSet1);  
  DataGrid1.EditItemIndex   =-1;  
  BindGrid("people");  
   
   
   
  }Top

23 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 13:08:37 得分 0

从代码上看提出几点,command最好是局部变量!  
  sqlCommand1.Connection   .Close   ();   --删除事件中这句移动到最后试下!  
  sqlDataAdapter1.Fill   (myDataSet1);  
  DataGrid1.EditItemIndex   =-1;  
  BindGrid("people");  
   
  建议你单步调试下  
  Top

24 楼carl13720(蒲卡)回复于 2006-04-24 13:13:08 得分 0

好,我试Top

25 楼luqinghua(Action)回复于 2006-04-24 13:17:06 得分 0

重新绑定DataGridTop

26 楼carl13720(蒲卡)回复于 2006-04-24 13:29:24 得分 0

不行......  
  对了,忘记说一下,我的"编辑"可以实现,"更新",什么的都可以,  
  就是"删除"要了我的命了,  
  我去问老师,他说,让我自己去查,  
  我..................Top

27 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 13:33:27 得分 0

在你单步调试的时候,你看他有没有进入到查询数据库得到数据源的那块,一步一步的来Top

28 楼fxqyyzg(海冬青)(昨夜西风凋碧树。独上高楼,望尽天涯路)回复于 2006-04-24 13:57:12 得分 0

你的datagrid内容没有变,就说明数据源还是删除以前那个,删除以后再从新读下数据源绑定回Top

29 楼szc21(卖炭翁)回复于 2006-04-24 14:01:02 得分 0

没注意看,不过我想你就是DataGrid绑定的问题,你要写个程序绑定,然后删除后在调用那个绑定函数.就OK了Top

30 楼carl13720(蒲卡)回复于 2006-04-24 14:12:52 得分 0

关键是,我第一次点“删除”,页面没有变化,但是,在数据库中,已经删除了,  
  我第2次还点那个“删除”,就把那行记录给删除了Top

31 楼carl13720(蒲卡)回复于 2006-04-24 14:15:45 得分 0

以下是正常“删除”的例子:  
  private   void   BindGrid()  
  {  
  string   strCommand="select   *   from   teacher";  
   
  SqlDataAdapter   da=new   SqlDataAdapter(strCommand,myConnection);  
  DataSet   ds=new   DataSet   ();  
  da.Fill   (ds,"scores");  
  DataGrid1.DataSource   =ds.Tables   ["scores"].DefaultView   ;  
  DataGrid1.DataBind   ();  
  }  
  //--------------------------------------------------------  
  private   void   DataGrid1_DeleteCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
  string   strCommand="delete   from   teacher   where   教职工号   =003";  
  SqlCommand   myCommand=new   SqlCommand   (strCommand,myConnection);  
  myCommand.Connection   .Open   ();  
  myCommand.ExecuteNonQuery   ();  
  myCommand.Connection   .Close   ();  
  BindGrid();  
   
  }  
  这个没有问题,点“删除”,那条记录就删除了,  
  但是,同样的方法,在我的程序里面就是不行,  
  55555555555,我从8点30来,现在,14:15了,我好饿,Top

32 楼jimu8130(火箭的未来在哪里?)回复于 2006-04-24 14:19:56 得分 0

myDataSet1是什么?Top

33 楼biao1(蓝色代码)回复于 2006-04-24 14:27:14 得分 0

if(!IsPostBack)  
                    {  
  BindGrid("people");  
  sqlDataAdapter1.Fill   (myDataSet1);  
  }  
  这样试下   我也觉得你没有重新邦定数据,虚拟表中还是删除前的数据呢Top

34 楼carl13720(蒲卡)回复于 2006-04-24 14:30:07 得分 0

//   myDataSet1  
  this.myDataSet1.DataSetName   =   "myDataSet";  
  this.myDataSet1.Locale   =   new     System.Globalization.CultureInfo("zh-CN");  
  我是通过[数据]工具箱里的,就是,数据适配器连接数据源的,  
  我只是不知道,为什么,点2次它才删除掉,点一次页面就没有反映,但是在数据库中已经删除了Top

35 楼rainy816(笨笨猪)回复于 2006-04-24 14:33:55 得分 0

不是有个自动刷新的属性吗?改为TRUE试试看。刷新到服务器。Top

36 楼carl13720(蒲卡)回复于 2006-04-24 15:05:14 得分 0

请教:自动刷新的属性在哪里啊?Top

37 楼wang355()回复于 2006-04-24 15:36:19 得分 0

你看看你的sql语句有没有错误,有时候一些莫名其妙的错误是由于sql语句的问题!Top

38 楼carl13720(蒲卡)回复于 2006-04-24 18:47:21 得分 0

SQL语句没有错误,因为它可以执行删除操作,而且数据确实被删除了,但是,点2次才在页面上显示出来Top

39 楼shinhwawu(继续郁闷)回复于 2006-04-24 19:41:21 得分 0

 
  我跟你问题一样!我都急死了!而且我比你更郁闷!你是不是怎么运行都不行!  
  我单步调试就是对的,或者在那里设置一个断点也是对的,可是就是不能一下子运行过去!  
  气昏了!Top

40 楼zhuzhu_syj(猪猪)回复于 2006-04-25 08:11:54 得分 0

那肯定是IsPostBack问题  
   
  还有建议LZ绑定数据的时候写个类,重新绑定拿来用就行了Top

41 楼hm3812884()回复于 2006-04-25 08:48:50 得分 0

视频会议源代码,全国最低价,只要3000RMB  
   
  支持16路视频,采用H264压缩算法,支持混音,可以多人同时说话。  
   
  支持白板,浏览器共享,屏幕演示,视频广播。  
   
  可以录制视频会议。  
   
  价谦物美,可以用来修改成视频会议,收费性质的聊天室。  
   
  9158聊天室就是用我这套代码修改而成的。  
   
  联系QQ:525425941   (请注明视频会议)  
   
  这已是最低价了,不还价,想还价的话不要加我了。Top

42 楼j01501fei()回复于 2006-04-25 10:01:14 得分 0

你是不是还有别的查询的Query控件绑定!如果一个查询和一个删除绑定到同一个Query控件的话,就出这样的错误!Top

43 楼Kevin_jun()回复于 2006-04-25 11:11:06 得分 5

sqlDataAdapter1.Fill   (myDataSet1);  
  DataGrid1.EditItemIndex   =-1;  
   
  你绑定了本地缓存的数据集.然后再显示.  
  你虽然紧接调用了BindGrid("people");  
  但在这个程序中的以下这句  
  DataGrid1.DataSource   =ds.Tables   ["people"].DefaultView   ;  
  只是给你的数据源中追加了一个数据视图.并不是当前的.你的  
  .DataBind()也只是显示你开始myDataSet1中的数据,即本地中的.所以不会变.  
  当你点第二次时,你的myDataSet1开始更新.而你也并没有再删除.然后绑定的就是更新的数据.  
  但你的BindGrid("people");这个方法可能依然不是有效的.  
   
  我是这样认为的.你可以试一下,每次点时显示你的sqlCommand1.ExecuteNonQuery   ();即影响行数显示出来看一下.Top

44 楼Yellow198267(才高七八斗,学富五六车,改行三四次,月入一两千!)回复于 2006-04-25 11:14:45 得分 3

如果你实在不知道怎么删除的话,可以给它加个checkbox摸板列。然后删除选中的项目。  
  for(int   i=0;i<=myGrid.Items.Count-1;i++)  
  {  
      CheckBox   chk=(CheckBox)myGrid.Items[i].FindControl("chk");//获取选择列的控件  
      if(chk.Checked==true)  
      {  
        //删除操作的sql语句和执行  
        string   sql="delete     from   zcqcb   where   yqbh='"+myGrid.Items[i].Cells                           [1].Text.ToString().Trim()+"'   and   qcbh='"+this.qcbh+"'";  
  myCls.ExecuteSql(sql);//注:myCls是我一个调用数据库操作的基类  
  }  
  }Top

45 楼shinhwawu(继续郁闷)回复于 2006-04-25 11:15:45 得分 0

我建议你单步跟踪运行,肯定就会正常!试试!Top

46 楼Yellow198267(才高七八斗,学富五六车,改行三四次,月入一两千!)回复于 2006-04-25 11:15:49 得分 0

for(int   i=0;i<=myGrid.Items.Count-1;i++)  
  {  
  CheckBox   chk=(CheckBox)myGrid.Items[i].FindControl("chk");//获取选择列的控件  
  if(chk.Checked==true)  
  {  
  //删除操作的sql语句和执行  
  string   sql="delete     from   .....";  
  myCls.ExecuteSql(sql);  
  }  
  }Top

47 楼Yellow198267(才高七八斗,学富五六车,改行三四次,月入一两千!)回复于 2006-04-25 11:17:46 得分 0

补充一点:删除之后也得重新刷新页面才行。你可以在页面上加一个隐藏按钮。删除之后激发它的单击事件Top

48 楼onlymoon(啸熬浆糊)回复于 2006-04-25 11:50:02 得分 0

你的代码是这样写的:  
  .......  
  DataGrid1.EditItemIndex   =-1;  
  .......  
  我认为应该这样写:  
  if(e.Item.ItemIndex   <=   0)  
  {  
  int   newPageIndex   =   DataGrid1.CurrentPageIndex-1;    
  DataGrid1.CurrentPageIndex   =   (newPageIndex   <   0)?0:newPageIndex;  
  }  
   
  应该能解决你的问题Top

49 楼zhounet(阳光棚~~)回复于 2006-04-25 16:36:09 得分 0

删除后,重新绑定数据源Top

相关问题

关键词

得分解答快速导航

  • 帖主:carl13720
  • jimu8130
  • Kevin_jun
  • Yellow198267

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo