Mình mới học lập trình web asp.net bằng C#, mình phải làm 1 đề tài có giỏ hàng để nộp nhưng khi đã cố mò tới đc phần add hàng vào giỏ hàng thì lại phát sinh lỗi, mình đã cố gắng sửa nhưng vẫn ko đc. các bạn biết thì giúp mình với
Lỗi của nó đây:
Server Error in '/noithatoto' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Line 108: int prodID = int.Parse(btn.CommandArgument);
Line 109: int Quantity = int.Parse(txtQuantity.Text);
Line 110: Cart.Add(prodID,Quantity); / lỗi ở dòng này /
Line 111:
Line 112: }

Source File: d:\THIETKEWEB\project\noithatoto\uc\productDetail. ascx.cs Line: 110

Stack Trace:


[NullReferenceException: Object reference not set to an instance of an object.]
uc_productDetail.btnAddToCart_Click(Object sender, EventArgs e) in d:\THIETKEWEB\project\noithatoto\uc\productDetail. ascx.cs:110
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
System.Web.UI.WebControls.Button.RaisePostBackEven t(String eventArgument) +112
System.Web.UI.WebControls.Button.System.Web.UI.IPo stBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEve ntHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCol lection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

- Còn đây là code của nó

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.Display();
}
}


private void Display()
{
String prodID = Request["prodID"];
String sqlProduct = "SELECT prodID,prodName,prodPrice FROM product WHERE prodID=@prodID";
DataTable product = Database.GetData(sqlProduct,"@prodID", prodID);
lblProductID.Text = product.Rows[0]["prodID"].ToString();
lblProductName.Text = product.Rows[0]["prodName"].ToString();
lblUnitPrice.Text = "$ " + product.Rows[0]["prodPrice"].ToString();
btnAddToCart.CommandArgument = prodID;
}

protected void btnAddToCart_Click(object sender, EventArgs e)
{

ShoppingCart Cart = (ShoppingCart)Session["ShoppingCart"];
Button btn = (Button)sender;
int prodID = int.Parse(btn.CommandArgument);
int Quantity = int.Parse(txtQuantity.Text);
Cart.Add(prodID,Quantity);

}


đây là class shoping cart:

public class ShoppingCart : DataTable
{
public ShoppingCart()
{
this.Columns.Add("prodID", typeof(int)).DefaultValue = -1;
this.Columns.Add("prodName", typeof(string)).DefaultValue = "";
this.Columns.Add("prodPrice", typeof(double)).DefaultValue = 0;
this.Columns.Add("Quantity", typeof(int)).DefaultValue = 1;
this.Columns.Add("Discount", typeof(double)).DefaultValue = 0;
this.Columns.Add("Amount", typeof(double), "prodPrice*Quantity*(1-Discount)");

this.PrimaryKey = new DataColumn[] { this.Columns["prodID"] };
}

public void Add(int prodID, int Quantity)
{
this.AddProduct(prodID, Quantity, false);
}

public void Update(int prodID, int Quantity)
{
this.AddProduct(prodID, Quantity, true);
}

public void Remove(int prodID)
{
try
{
DataRow product = this.Rows.Find(prodID);
this.Rows.Remove(product);
}
catch
{
Console.WriteLine("Product not found !");
}
}

public double Total
{
get
{
object value = this.Compute("SUM(Amount)", "");
return value == DBNull.Value ? 0 : (double)value;
}
}

public int Count
{
get
{
return this.Rows.Count;
}
}

private void AddProduct(int prodID, int Quantity, bool Update)
{
try
{
DataRow Item = this.Rows.Find(prodID);
Item["Quantity"] = Quantity + (Update ? 0 : (int)Item["Quantity"]);
}
catch
{
String sql = "SELECT prodID, prodName, prodPrice, " + Quantity + " as Quantity, 0 AS Discount FROM product WHERE prodID=@prodID";
Database.Fill(this, sql, "@prodID", prodID);
}
}
}