在数据集中插入数据行的问题

时间:2014-07-17 08:07:16

标签: c# asp.net

我在数据集中插入datarow时遇到了问题。我想在数据集中插入一行,然后在用户单击添加产品按钮时将其绑定到gridview控件,但它一直给我一个错误"Object reference not set to an instance of an object."

我的HTML代码

<form runat="server" class="form-horizontal"> <div class="row">

<div class="form-group">
                        <div class="col-md-6">
                            <label class="control-label col-md-3">Product ID:</label>
                            <asp:Label ID="lblProdID" class="control-label col-md-3" runat="server" />
                        </div>
                        <div class="col-md-6">
                            <label class="control-label col-md-3">Product Name:</label>
                            <div class="col-md-5 input-group">
                                <asp:DropDownList ID="ddlProducts" runat="server" class="form-control" />
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-6">
                            <label class="control-label col-md-3">Quantity:</label>
                            <div class="col-md-5">
                                <asp:TextBox ID="txtQty" runat="server" class="form-control" />
                            </div>
                        </div>
                        <div class="col-md-5">
                            <div class="col-md-offset-6">
                                <asp:Button ID="btnAddProduct" runat="server" class="btn btn-primary" 
                                    Text="Add Product" onclick="btnAddProduct_Click" />
                            </div>
                        </div>   

</div>


<asp:GridView ID="grdPODetails" 
                        class="table table-bordered table-hover table-responsive" runat="server" 
                        AutoGenerateColumns="False" ShowHeaderWhenEmpty="True">
                        <Columns>
                            <asp:BoundField DataField="ProductID" HeaderText="#" />
                            <asp:BoundField DataField="POQtyOrdered" HeaderText="Quantity" />
                        </Columns>

                    </asp:GridView> </form>

c#c​​ode

SqlConnection con = new SqlConnection(Helper.GetCon());
DataSet Details

void GetProducts()
    {
        con.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT ProductID, ProductName FROM Products";
        SqlDataReader data = cmd.ExecuteReader();
        ddlProducts.DataSource = data;
        ddlProducts.DataTextField = "ProductName";
        ddlProducts.DataValueField = "ProductID";
        ddlProducts.DataBind();
        con.Close();
        lblProdID.Text = ddlProducts.SelectedValue;
    }

void GetPODetails()
    {
        con.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT * FROM PODetails";
        SqlDataAdapter data = new SqlDataAdapter(cmd);
        Details = new DataSet();
        data.Fill(Details, "PODetails");
        grdPODetails.DataSource = Details;
        grdPODetails.DataBind();
    }

protected void btnAddProduct_Click(object sender, EventArgs e)
    {
        DataRow dr;
        dr = Details.Tables["PODetails"].NewRow();
        dr["ProductID"] = lblProdID.Text;
        dr["POQtyOrdered"] = txtQty.Text;

        Details.Tables["PODetails"].Rows.Add(dr);
        Details.Tables["PODetails"].AcceptChanges();
        Session["mydataset"] = Details;
    }

1 个答案:

答案 0 :(得分:0)

根据您的代码,您要做的是, 获取数据集并将其保存到名为Details的公共变量中。然后,您将在按钮单击事件中访问此变量。如果要在!IsPostBack中保存详细信息,则仅在第一次回发期间保存该值。  您必须将详细信息保存到session / ViewState中 您可以做的是为下面的详细信息创建一个属性

DataSet Details
{
    get
    {
        if (Session["mydataset"] != null)
            GetPODetails();
        return Session["mydataset"] as DataSet;
    }
    set
    {
        Session["mydataset"] = value;
    }
}