2012-10-15 37 views
0

您好,我将数据从文本框添加到我的gridview本地而不是从数据库。它就像销售人员销售产品的销售页面。现在我想从该gridview中删除一行,但在删除时我总是得到异常。请帮助我。这里是我的代码,我得到的数据和存储在gridview中。谢谢。如何从gridview中删除特定的行。使用gridview的内置删除命令按钮

DataTable dt1 = new DataTable(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      gridVIEWData(); 
      GridView1.DataSource = dt1; 
      GridView1.DataBind(); 
     } 
private void gridVIEWData() 
    { 

     dt1.Columns.Add("pName", typeof(string)); 
     dt1.Columns.Add("pCategory", typeof(string)); 
     dt1.Columns.Add("price", typeof(string)); 
     dt1.Columns.Add("pQuantity", typeof(string)); 
     dt1.Columns.Add("totalPrice", typeof(string)); 
     Session["dtInSession"] = dt1; //Saving Datatable To Session 
    } 
protected void Button3_Click(object sender, EventArgs e) 
    { 
     if (Session["dtInSession"] != null) 
      dt1 = (DataTable)Session["dtInSession"]; //Getting datatable from session 


      Int32 total = Convert.ToInt32(txt_quantity.Text) * Convert.ToInt32(txt_price.Text); 
      DataRow dr = dt1.NewRow(); 
      dr["pName"] = DropDownList2.SelectedItem; 
      dr["pCategory"] = DropDownList1.SelectedItem; 
      dr["price"] = txt_price.Text; 
      dr["pQuantity"] = txt_quantity.Text; 
      dr["totalPrice"] = total; 
      dt1.Rows.Add(dr); 


      Session["dtInSession"] = dt1;  //Saving Datatable To Session 

      GridView1.DataSource = dt1; 
      GridView1.DataBind(); 

     } 
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 

     // string value = GridView1.DataKeys[e.RowIndex].Values["price"].ToString(); 
     //GridView1.DeleteRow(Convert.ToInt32(value)); 
     //GridView1.DeleteRow(GridView1.SelectedIndex); 

      // dt1.Rows.RemoveAt(GridView1.SelectedIndex); 
     Int32 index = GridView1.SelectedIndex; 
     GridView1.DeleteRow(index); 
    } 

回答

0

只是为了你的代码一致,

方法一:

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
     if (Session["dtInSession"] != null) 
      dt1 = (DataTable)Session["dtInSession"]; 

     Int32 index = GridView1.SelectedIndex; 
     dt1 = dt1.Rows[index].Delete(); 

     dt1.AcceptChanges(); 

     Session["dtInSession"] = dt1; //Saving Datatable To Session 
     GridView1.DataSource = dt1;       
     GridView1.DataBind(); 
} 

方法2:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="pName" onselectedindexchanged="GridView1_SelectedIndexChanged"> 

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string _pName = Convert.ToString(GridView1.SelectedDataKey.Value); 

    // Once you get the pName you can query from DataTable and Delete the row which the pName = _pName 
    // BindGrid and Store DataTable in session. 
} 

这可能会帮助你。

+0

m仍然出现错误“位置-1没有行” –

+0

您必须使用DataKeyNames =“pName”[pName]应该是唯一的。 –

-1
protected void gvDetails_RowDeleting(object sender, GridViewDeleteEventArgs e) 
     { 
      if (ViewState["CurrentTable"] != null) 
       dt = (DataTable)ViewState["CurrentTable"];    
      if (dt.Rows.Count > 0) 
      { 
       int Index = Convert.ToInt32(gvDetails.DataKeys[e.RowIndex].Values["Pk"].ToString()); 
       dt.Rows.Cast<DataRow>().Where(o => o.Field<Int32>("Pk").Equals(Index)).FirstOrDefault().Delete(); 
       // dt.Rows.RemoveAt(Index-1); 
       gvDetails.DataSource = dt; 
       gvDetails.DataBind(); 
      } 
     } 
+1

虽然这可能会回答这个问题,但请您提供一些关于它在做什么的评论,而不是粘贴5行未格式化的文本。 – Deanna