我的问题挺奇怪的
当点击“删除”时还可以正常执行删除,点击“更改数量”就会出现“更改”“取消”两个按键但是,点击“取消”时竟然调用的删除功能(DataGrid_Delete())没有响应“取消”应有的功能
点击“更改数量时”没有任何反应!
这是我的毕业设计我是新手,时间真宝贵呀
希望高手能帮帮我 谢谢 在cart.aspx中这样定义的的 
......  
<%@ Page Inherits="cart" Src="cart.cs" %>
.........   
<tr> 
              <td align="center">
    <asp:DataGrid id="dg" runat="server"
           Width="500" BackColor="#ccccff" 
           BorderColor="black" ShowFooter="false" 
          CellPadding=3 CellSpacing="0"
           Font-Name="Verdana" Font-Size="8pt"
          HeaderStyle-BackColor="#aaaadd"
OnEditCommand="DataGrid_Edit"
           OnCancelCommand="DataGrid_Cancel"
OnUpdateCommand="DataGrid_Update"
OnDeleteCommand="DataGrid_Delete"
AutoGenerateColumns="false"
DataKeyField="BookID"
           MaintainState="false">
<Columns>
<asp:EditCommandColumn EditText="更改数量" CancelText="取消" 
UpdateText="更新" ItemStyle-Wrap="false"/>
<asp:ButtonColumn Text="删除" CommandName="Delete" ItemStyle-Wrap="false"/>
<asp:BoundColumn HeaderText="书名" DataField="BookID" ReadOnly="True"/>
<asp:BoundColumn HeaderText="ISBN书号" DataField="ISBN书号" ReadOnly="True"/>
<asp:BoundColumn HeaderText="原价" DataField="SalePrice" ReadOnly="True" />
<asp:BoundColumn HeaderText="现价" DataField="MemberPrice" ReadOnly="True"/>
<asp:BoundColumn HeaderText="数量" DataField="i" />
<asp:BoundColumn HeaderText="小计" DataField="Expr1003" ReadOnly="True" />
<asp:BoundColumn HeaderText="日期"  ReadOnly="True"/>
</Columns>
</asp:DataGrid> 
  &nbsp;</td>
            </tr>
.......
在cart.cs中using System;
using System.Web;
using System.Collections;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.OleDb;
using BookShop;public class cart : Page 
{
public DataGrid  dg;


public void DataGrid_Cancel(Object sender,DataGridCommandEventArgs E)
{
dg.EditItemIndex = -1;
BindGrid();
}
public void DataGrid_Update(Object sender,DataGridCommandEventArgs E)
{
OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("BookShop.mdb"));
string strSQL2 = "UPDATE Cart SET "+
"i="+((TextBox)E.Item.Cells[6].Controls[0]).Text
+" where BookID='"+dg.DataKeys[(int)E.Item.ItemIndex]+"'";
OleDbCommand cm2 = new OleDbCommand(strSQL2,Conn);
Conn.Open();
try    
{
cm2.ExecuteNonQuery();
dg.EditItemIndex=-1;
MyLabel.Text="ok";
}
catch (OleDbException) 
{
MyLabel.Text="no";
}
cm2.Connection.Close();
// 更新DataGrid
BindGrid();
}
public void DataGrid_Edit(Object sender,DataGridCommandEventArgs E)
{
//Response.Redirect("index.aspx");
dg.EditItemIndex = (int)E.Item.ItemIndex;
BindGrid();
} // 处理删除事件
public void DataGrid_Delete(Object sender,DataGridCommandEventArgs E)
{
OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("BookShop.mdb"));
String strSQL="DELETE FROM Cart WHERE BookID='"
+ dg.DataKeys[(int)E.Item.ItemIndex]+"'";
OleDbCommand cm = new OleDbCommand(strSQL,Conn);
Conn.Open();
try 
{
cm.ExecuteNonQuery();
MyLabel.Text="ok";
}
catch (OleDbException)
{
MyLabel.Text="no";
}
Conn.Close(); BindGrid();
}
public void BindGrid() 
{
Cart cart=new Cart();
string sql1="select Cart.BookID, SalePrice, MemberPrice,MemberPrice*i,ISBN书号, i from Cart,BookInfo where UserID='"+Session["username"]+"' AND Cart.BookID=BookInfo.BookID";
DataSet ds1 = new DataSet();
ds1=cart.GetDataSet(sql1);
dg.DataSource=ds1;
dg.DataBind();
}


}

解决方案 »

  1.   

    小弟是初学者
    不太明白生么是后台有事件注册
    我把cart.cs全粘上来,大家帮忙看看
    using System;
    using System.Web;
    using System.Collections;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.OleDb;
    using BookShop;public class cart : Page 
    {
    public DataGrid  dg;
    public Label        MyLabel;
    public Panel        Login;
    public Panel        Login1;
    void Page_Load(Object sender, EventArgs e) 
    {
    User user=new User();
    MyLabel.Text=user.HelloWorld();
    string sql="select * from UserInfo where UserID='"+Session["username"]+"' and Password='"+Session["password"]+"'";
    MyLabel.Text=sql;
    DataSet ds = new DataSet();
    ds=user.GetDataSet(sql);
    if (0==ds.Tables["grade"].Rows.Count)
    {//是不是会员
    MyLabel.Text = "找不到此使用者代號  請重新輸入"+Session["username"]; Login.Visible=true;
    Login1.Visible=false;
    }
    else
    {
    /*Cart cart=new Cart();
    string sql1="select * from Cart where UserID='"+Session["username"]+"'";
    DataSet ds1 = new DataSet();
    ds1=cart.GetDataSet(sql1);
    dg.DataSource=ds1;
    dg.DataBind();*/
    BindGrid();


    Login.Visible=false;
    Login1.Visible=true;
    }
    } public void DataGrid_Cancel(Object sender,DataGridCommandEventArgs E)
    {
    dg.EditItemIndex = -1;
    BindGrid();
    }
    public void DataGrid_Update(Object sender,DataGridCommandEventArgs E)
    {
    OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
    "Data Source="+Server.MapPath("BookShop.mdb"));
    string strSQL2 = "UPDATE Cart SET "+
    "i="+((TextBox)E.Item.Cells[6].Controls[0]).Text
    +" where BookID='"+dg.DataKeys[(int)E.Item.ItemIndex]+"'";
    OleDbCommand cm2 = new OleDbCommand(strSQL2,Conn);
    Conn.Open();
    try    
    {
    cm2.ExecuteNonQuery();
    dg.EditItemIndex=-1;
    MyLabel.Text="ok";
    }
    catch (OleDbException) 
    {
    MyLabel.Text="no";
    }
    cm2.Connection.Close();
    // 更新DataGrid
    BindGrid();
    }
    public void DataGrid_Edit(Object sender,DataGridCommandEventArgs E)
    {
    //Response.Redirect("index.aspx");
    dg.EditItemIndex = (int)E.Item.ItemIndex;
    BindGrid();
    } // 处理删除事件
    public void DataGrid_Delete(Object sender,DataGridCommandEventArgs E)
    {
    OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
    "Data Source="+Server.MapPath("BookShop.mdb"));
    String strSQL="DELETE FROM Cart WHERE BookID='"
    + dg.DataKeys[(int)E.Item.ItemIndex]+"'";
    OleDbCommand cm = new OleDbCommand(strSQL,Conn);
    Conn.Open();
    try 
    {
    cm.ExecuteNonQuery();
    MyLabel.Text="ok";
    }
    catch (OleDbException)
    {
    MyLabel.Text="no";
    }
    Conn.Close(); BindGrid();
    }
    public void BindGrid() 
    {
    Cart cart=new Cart();
    string sql1="select Cart.BookID, SalePrice, MemberPrice,MemberPrice*i,ISBN书号, i from Cart,BookInfo where UserID='"+Session["username"]+"' AND Cart.BookID=BookInfo.BookID";
    DataSet ds1 = new DataSet();
    ds1=cart.GetDataSet(sql1);
    dg.DataSource=ds1;
    dg.DataBind();
    }
    }
      

  2.   

    你把DataGrid定义处的事件名称改成如下即可
    <asp:DataGrid id="dg" runat="server"
    OnEditCommand="dg_Edit" OnCancelCommand="dg_Cancel" OnUpdateCommand="dg_Update" OnDeleteCommand="dg_Delete" .....
    并且将在后台的相应的事件名称也该一下就可以了。如:
    public void DataGrid_Cancel(Object sender,DataGridCommandEventArgs E)改成public void dg_Cancel(Object sender,DataGridCommandEventArgs E).
    你的DataGrid id="dg" ,事件名称DataGrid_Cancel时肯定对不上头啊,这下问题的所在你总算明白了吧?