0

嗨,我正在将文本框中的数据添加到本地的 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);
    }
4

2 回答 2

0

只是为了与您的代码保持一致,

方法1:

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();   
}

方法二:

<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.
}

这可能会对您有所帮助。

于 2012-10-15T17:11:11.903 回答
-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();
            }
        }
于 2014-07-30T10:39:58.523 回答