asp.net中的Formview EditItemTemplate c#

时间:2012-10-12 16:34:34

标签: c# webforms formview

我有一个正在更新的产品表。更新的字段是category_id,prod_name,prod_desc,奖品,状态。我正在使用formview进行更新。但是我遇到了category_id的问题。 category_id是一个数据绑定下拉列表,使用sqldatasource从数据库中的类别表中获取id和name。当产品没有category_id值时,默认情况下由sql输入空值。  当我在formview中进入edititemtemplate模式时,问题出现了,dropdownlist无法显示db的空值,因此它抛出异常:

  

'category_idDropdown'有一个SelectedValue,因为它无效   在项目列表中不存在。参数名称:值

这是我在updateprod.aspx页面中的代码:

<asp:DropDownList ID="category_idDropdown" runat="server" 
                AppendDataBoundItems="True"
                AutoPostBack="True"
                DataSourceID="catnames" 
                DataTextField="category_name" 
                DataValueField="category_id" ViewStateMode="Enabled" 
                SelectedValue='<%# Bind("category_id") %>' >
    <asp:ListItem Text="-- Choose Category--" Value="0" Selected="True">
    </asp:ListItem>
</asp:DropDownList>

这是我的sqldatasource代码,下拉列表数据绑定到:

<asp:SqlDataSource ID="catnames" runat="server" 
        ConnectionString="<%$ ConnectionStrings:cloud_Kewl.Properties.Settings.conString %>" 
        SelectCommand="SELECT [category_id], [category_name] FROM [category]">
</asp:SqlDataSource>

&安培;最后,这是用于更新产品详细信息的sqldatasource:

<asp:SqlDataSource ID="productUpdate" runat="server" 
        ConnectionString="<%$ ConnectionStrings:cloud_Kewl.Properties.Settings.conString %>"             
        SelectCommand="SELECT prod_id, category_id, prod_name, prod_desc, prod_price, img_name, img_contenttype, prod_img, status FROM product WHERE (prod_id = @prod_id)"    
        UpdateCommand="UPDATE product SET category_id = @category_id, prod_name = @prod_name, prod_desc = @prod_desc, prod_price = @prod_price, status = @status WHERE (prod_id = @prod_id)">
    <SelectParameters>
        <asp:QueryStringParameter Name="prod_id" QueryStringField="prod_id" Type="Int32" />
    </SelectParameters>
    <UpdateParameters>
        <asp:Parameter Name="category_id" Type="Int32" DefaultValue="0" />
        <asp:Parameter Name="prod_name" Type="String" />
        <asp:Parameter Name="prod_desc" Type="String" />
        <asp:Parameter Name="prod_price" Type="Decimal" />
        <asp:Parameter Name="status" Type="String" />
        <asp:Parameter Name="prod_id" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>

我查看了有关此网站中的formview和edititemtemplate的问题,但没有一个能让我知道如何解决这个问题。 我尝试以编程方式解决它,但没有成功解决这个问题。请帮帮我,我找了3个星期的解决方案。没有成功:(

1 个答案:

答案 0 :(得分:0)

尝试在设置空值之前重新绑定数据源:

protected void myFormView_OnItemEditing(object sender, ListViewEditEventArgs e)
{
    DropDownList category_idDropdown = (DropDownList)(myFormView.FindControl("category_idDropDown"));
    category_idDropdown.DataBind();        
    category_idDropdown.Items.Add(0, new ListItem("Select", null));
}

问题可能不是你试图选择一个不存在的值,而是你试图将已经一个空值的DropDownList绑定到一个不包含该值的数据源。