我在数据集中插入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#code
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;
}
答案 0 :(得分:0)
根据您的代码,您要做的是, 获取数据集并将其保存到名为Details的公共变量中。然后,您将在按钮单击事件中访问此变量。如果要在!IsPostBack中保存详细信息,则仅在第一次回发期间保存该值。 您必须将详细信息保存到session / ViewState中 您可以做的是为下面的详细信息创建一个属性
DataSet Details
{
get
{
if (Session["mydataset"] != null)
GetPODetails();
return Session["mydataset"] as DataSet;
}
set
{
Session["mydataset"] = value;
}
}