HamidiFar
دوشنبه 10 بهمن 1390, 11:40 صبح
سلام به یک مشکل در گرید برخورد کردم لطفا کمک کنید
وقتی رو دگمه Edit کلیک میکنم این Error رو میگیره :
'cboProduct' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value
کد گرید :
<asp:GridView ID="gvDeliveryList" runat="server" DataKeyNames="OrderID" AutoGenerateColumns="False"
AutoGenerateEditButton="True" OnRowDataBound="gvDeliveryList_RowDataBound"
OnRowEditing="gvDeliveryList_RowEditing">
<Columns>
<asp:TemplateField HeaderText="Order">
<ItemTemplate>
<%# Eval("OrderNo") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtOrderNo" runat="server" Text='<%# Eval("OrderNo") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Product">
<ItemTemplate>
<%# Eval("ProductID") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="cboProduct" runat="server" SelectedValue='<%# Bind("ProductId") %>'>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Code Behind :
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
BindGrid();
}
void BindGrid()
{
try
{
gvDeliveryList.DataSource = Controller.GetOrderList();
gvDeliveryList.DataBind();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
protected void gvDeliveryList_RowEditing(object sender, GridViewEditEventArgs e)
{
gvDeliveryList.EditIndex = e.NewEditIndex;
BindGrid();
}
protected void gvDeliveryList_RowDataBound(object sender, GridViewRowEventArgs e)
{
try
{
if (e.Row.RowType == DataControlRowType.DataRow &&
gvDeliveryList.EditIndex == e.Row.RowIndex )
{
DropDownList cbo = e.Row.FindControl("cboProduct") as DropDownList;
IList<Product> products = Controller.GetProductList();
foreach (Product product in products)
{
ListItem listItem = new ListItem(product.ProductNo, Convert.ToString(product.ProductId));
if (cbo != null) cbo.Items.Add(listItem);
}
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
کد کلاس Controller :
public static IList<Order> GetOrderList()
{
context = new Entities();
return (from o in context.Orders select o).ToList();
}
public static IList<Product> GetProductList()
{
context = new Entities();
return (from p in context.Products
where p.Active == true
orderby p.ProductNo
select p).ToList();
}
وقتی رو دگمه Edit کلیک میکنم این Error رو میگیره :
'cboProduct' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value
کد گرید :
<asp:GridView ID="gvDeliveryList" runat="server" DataKeyNames="OrderID" AutoGenerateColumns="False"
AutoGenerateEditButton="True" OnRowDataBound="gvDeliveryList_RowDataBound"
OnRowEditing="gvDeliveryList_RowEditing">
<Columns>
<asp:TemplateField HeaderText="Order">
<ItemTemplate>
<%# Eval("OrderNo") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtOrderNo" runat="server" Text='<%# Eval("OrderNo") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Product">
<ItemTemplate>
<%# Eval("ProductID") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="cboProduct" runat="server" SelectedValue='<%# Bind("ProductId") %>'>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Code Behind :
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
BindGrid();
}
void BindGrid()
{
try
{
gvDeliveryList.DataSource = Controller.GetOrderList();
gvDeliveryList.DataBind();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
protected void gvDeliveryList_RowEditing(object sender, GridViewEditEventArgs e)
{
gvDeliveryList.EditIndex = e.NewEditIndex;
BindGrid();
}
protected void gvDeliveryList_RowDataBound(object sender, GridViewRowEventArgs e)
{
try
{
if (e.Row.RowType == DataControlRowType.DataRow &&
gvDeliveryList.EditIndex == e.Row.RowIndex )
{
DropDownList cbo = e.Row.FindControl("cboProduct") as DropDownList;
IList<Product> products = Controller.GetProductList();
foreach (Product product in products)
{
ListItem listItem = new ListItem(product.ProductNo, Convert.ToString(product.ProductId));
if (cbo != null) cbo.Items.Add(listItem);
}
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
کد کلاس Controller :
public static IList<Order> GetOrderList()
{
context = new Entities();
return (from o in context.Orders select o).ToList();
}
public static IList<Product> GetProductList()
{
context = new Entities();
return (from p in context.Products
where p.Active == true
orderby p.ProductNo
select p).ToList();
}