为什么点击DataGrid1 中的“Add"按钮,没有事件发生?
代码如下,小弟急等多谢高手指点!!!
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;namespace NetBook
{
/// <summary>
/// Test 的摘要说明。
/// </summary>
public class Test : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.Label Label4;
DataView CartView;
protected System.Web.UI.WebControls.DataGrid DataGrid2;
DataTable Cart;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (Session["My_ShoppingCart"] == null)
{
Cart = new DataTable();
Cart.Columns.Add(new DataColumn("书名", typeof(string)));
Cart.Columns.Add(new DataColumn("价格", typeof(double)));
Cart.Columns.Add(new DataColumn("数量", typeof(int)));
Cart.Columns.Add(new DataColumn("总计", typeof(double)));
Session["My_ShoppingCart"] = Cart;
}
else
Cart = (DataTable)Session["My_ShoppingCart"];

CartView = new DataView(Cart);
// 以 CartView 作为购物车之 DataGrid 伺服器控制项的资料来源
DataGrid1.DataSource = CartView;
DataGrid1.DataBind();
Label2.Text = Request.QueryString["bookid"];
if (!IsPostBack)
{ string sqlstring = "SELECT Id,Name,Price FROM Book WHERE Id=@bookid";
SqlConnection MyConnection = new SqlConnection("server=JZ;database=NetBook;uid=sa;pwd=");
SqlCommand MyCommand = new SqlCommand(sqlstring,MyConnection);
MyCommand.Parameters.Add("@bookid", SqlDbType.Int).Value = Request.QueryString["bookid"]; MyConnection.Open();
SqlDataReader dr = MyCommand.ExecuteReader();
DataGrid2.DataSource = dr;
DataGrid2.DataBind();
dr.Close();
MyConnection.Close();
}
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
this.DataGrid2.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid2_ItemCommand);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void DataGrid2_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
// 取得按钮所在列之「产品」字段的内容
TableCell BookCell = e.Item.Cells[3];
// 取得按钮所在列之「单价」字段的内容
TableCell priceCell = e.Item.Cells[4];

// 系结资料行之储存格中的资料系储存於 TableCell 的 Text 属性中
string name = BookCell.Text; double price = Convert.ToDouble(priceCell.Text);

if (e.CommandName == "AddToShopCart")
{
CartView.Sort = "书名";
int i;
// 搜寻使用者所购买的产品是否已存在於购物车中
i = CartView.Find(name);
if (i == -1) // 如果不存在於购物车中
{
DataRow dr = Cart.NewRow();
dr["书名"] = name;
dr["价格"] = price;
dr["数量"] = 1;
dr["总计"] = price;
Cart.Rows.Add(dr);
}
else
{
// 如果存在於购物车中
CartView[i]["数量"] = (int)CartView[i]["数量"] + 1;
CartView[i]["总计"] = (double)CartView[i]["总计"] + price;
}
CartView.Sort = null;
}
else
{
CartView.Sort = "书名";
int i;
// 搜寻使用者所要移除的产品是否已存在於购物车中
i = CartView.Find(name);
if (i >= 0) // 如果存在於购物车中
{
if ((int)CartView[i]["数量"] > 1)
{
CartView[i]["数量"] = (int)CartView[i]["数量"] - 1;
CartView[i]["总计"] = (double)CartView[i]["总计"] - price;
}
else
CartView.Delete(i);
}
CartView.Sort = null;
}
DataGrid1.DataBind();
} private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName == "Add")
{
Label3.Text = "按钮1!!!";
Label4.Text = "";
}
else
{
Label3.Text = "";
Label4.Text = "按钮2!!!";
}
}
}
}

解决方案 »

  1.   

    try to modify your Page_load:if (!IsPostBack)
    {
    CartView = new DataView(Cart);
    DataGrid1.DataSource = CartView;
    DataGrid1.DataBind();
    }
      

  2.   

    你的ADD的按钮名字与ItemCommand里面的事件名字不相符
      

  3.   

    Add按钮的名字确定是与ItemCommand里的事件名字相符合的。
      

  4.   

    private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    if(e.CommandName == "Add")//这里设置断点确认是否被执行,
    {
    Label3.Text = "按钮1!!!";
    Label4.Text = "";
    }
    else
    {
    Label3.Text = "";
    Label4.Text = "按钮2!!!";
    }

    //如果没有被执行,那是事件丢失了,asp.net经常会事件丢失,我解决办法就是把页面的aspx中的DataGrid1删掉然后重新建立,不过有时候不灵,需要把整个页面重建。
    或者你把
     this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
    这条语句放到,Page_Load()事件处理程序中来执行试试。如果断点执行了,那检查你的程序,是否有疏忽。