3

更新中の製品テーブルがあります。更新されるフィールドは、category_id、prod_name、prod_desc、prize、status です。その更新を行うためにフォームビューを使用しています。ただし、category_id に問題があります。category_id は、sqldatasource を使用してデータベースのカテゴリ テーブルから ID と名前を取得するデータ バインドされたドロップダウン リストです。商品に category_id 値がない場合、SQL によってデフォルトで null 値が入力されます。formview で edititemtemplate モードに移動すると問題が発生します。ドロップダウンリストは db から null 値を表示できないため、次の例外がスローされます。

「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

null 値が設定される前に、データソースを再バインドしてみてください。

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));
}

問題は、存在しない値を選択しようとしているのではなく、既にnull 値を持つ DropDownList を、その値を含まないデータソースにバインドしようとしていることにあると考えられます。

于 2012-10-12T19:20:08.470 に答える