在Gridview ASP.net中删除行后我无法添加新行

时间:2016-04-18 07:20:06

标签: c# asp.net nullreferenceexception aspxgridview

我的代码有一个奇怪的问题

删除行后,我的gridview中的NullReferenceException无法添加行。

我的逻辑是当添加新行时,我有另一个功能SetPreviousData。 当我没有删除行时,我的SetPreviousData不会引发任何异常,但在删除行并创建新行后,我的SetPreviousData引发了NullReferenceException异常。 这是我的AddNewRow()'

的代码
private void AddNewRowToGrid()
{
    if (ViewState["vsCurrent"] != null)
    {
        DataTable dtCurrentTable = (DataTable)ViewState["vsCurrent"];
        DataRow drNewRow = dtCurrentTable.NewRow();
        drNewRow["SALES_SO_LITEM_ID"] = Convert.ToInt32(dtCurrentTable.Rows.Count.ToString()+"101");
        drNewRow["ITEM_NAME"] = string.Empty;
        drNewRow["QUANTITY"] = 0;
        drNewRow["PRICE"] = 0;

        dtCurrentTable.Rows.Add(drNewRow);
        ViewState["vsCurrent"] = dtCurrentTable;
    }
    else
    {
        ViewState["vsCurrent"] = SetInitialRow();
    }

    BindDataGrid();
    SetPreviousData(); //Set Previous Data on Postbacks      
}

以及SetPreviousData

的此功能
public void SetPreviousData()
{
    int rowIndex = 0;
    if (ViewState["vsCurrent"] != null)
    {
        DataTable dt = (DataTable)ViewState["vsCurrent"];
        if (dt.Rows.Count > 0)
        {
            int max_rowindex = gvDetailSales.Rows.Count - 1;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i].RowState != DataRowState.Deleted)
                {
                    Label box1 = (Label)gvDetailSales.Rows[rowIndex].Cells[1].FindControl("lblItemName"); 
                    // raise exception because null                            
                    Label box2 = (Label)gvDetailSales.Rows[rowIndex].Cells[2].FindControl("lblQuantity");
                    Label box3 = (Label)gvDetailSales.Rows[rowIndex].Cells[3].FindControl("lblPrice");

                    box1.Text = dt.Rows[i]["ITEM_NAME"].ToString();
                    box2.Text = dt.Rows[i]["QUANTITY"].ToString();
                    box3.Text = dt.Rows[i]["PRICE"].ToString();

                    rowIndex++;
                }
            }
        }
    }
}

我该如何处理?谢谢

======================的 EDITED ================= =============================== 这是我SetInitialRow

的功能
public DataTable SetInitialRow()
    {
        DataTable dtInitial = new DataTable();
        DataRow drInitial = null;
        dtInitial.Columns.Add(new DataColumn("SALES_SO_LITEM_ID", typeof(string)));
        dtInitial.Columns.Add(new DataColumn("ITEM_NAME", typeof(string)));
        dtInitial.Columns.Add(new DataColumn("QUANTITY", typeof(int)));
        dtInitial.Columns.Add(new DataColumn("PRICE", typeof(float)));
        drInitial = dtInitial.NewRow();
        drInitial["SALES_SO_LITEM_ID"] = Convert.ToInt32(dtInitial.Rows.Count.ToString() + "101");
        drInitial["ITEM_NAME"] = string.Empty;
        drInitial["QUANTITY"] = 0;
        drInitial["PRICE"] = 0.0;
        dtInitial.Rows.Add(drInitial);
        return dtInitial;
    }

这是BindDataGrid

的功能
public void BindDataGrid()
    {

        gvDetailSales.DataSource = ViewState["vsCurrent"] as DataTable;
        gvDetailSales.DataBind();
    }

0 个答案:

没有答案