3

我有一个正在更新的产品表。更新的字段是 category_id、prod_name、prod_desc、prize、status。我正在使用表单视图来进行更新。但是我遇到了 category_id 的问题。category_id 是一个数据绑定下拉列表,使用 sqldatasource 从数据库中的类别表中获取 id 和 name。当产品没有category_id值时,sql默认输入空值。当我在 formview 中进入 edititemtemplate 模式时,问题出现了,下拉列表无法显示 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 周的解决方案。没有成功:(

4

1 回答 1

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 绑定到不包含该值的数据源。

于 2012-10-12T19:20:08.470 回答