1

sqldatasource にバインドされているサプライヤーのドロップダウン リストがあります。サプライヤーはフォームビューから追加できますが、挿入ボタンをクリックするとレコードがデータベースに挿入されますが、ドロップダウンリストには表示されません。

sqldatasource のコードは次のとおりです。

<asp:SqlDataSource runat="server" ID="sqlAddSupplier" 
 ConnectionString="<%$ ConnectionStrings:cctConnectionString%>" 
 ProviderName="<%$ ConnectionStrings:cctConnectionString.ProviderName%>" 
 InsertCommand="suppliers_Insert" InsertCommandType="StoredProcedure">
    <InsertParameters>
        <asp:SessionParameter SessionField="siteId" DefaultValue="0" Name="p_siteId" Type="Int64" />
        <asp:Parameter Name="code" Type="String" />
        <asp:Parameter Name="name" Type="String" />
    </InsertParameters>
</asp:SqlDataSource>

サプライヤを追加するためのドロップダウンリストとフォームビューのコードは次のとおりです。

<asp:DropDownList ID="lstSuppliers" runat="server" CssClass="dropDownList" 
 AppendDataBoundItems="true" DataSourceID="sqlSuppliers" DataTextField="name" 
 DataValueField="id" SelectedValue='<%# Bind("supplierId") %>' >
    <asp:ListItem Text="" Value="0"></asp:ListItem>
</asp:DropDownList>

<asp:Panel runat="server" ID="pnlAddSupplier" CssClass="groupBoxPageWidth">

    <asp:FormView ID="fvAddSupplier" runat="server" DataSourceID="sqlAddSupplier" 
     OnItemInserted="fvAddSupplier_ItemInserted">

        <InsertItemTemplate>
            <b>Code:*</b>
            <asp:TextBox ID="txtCode" runat="server" Text='<%# Bind("code") %>' CssClass="textbox"></asp:TextBox>
            <b>Name *:</b>
            <asp:TextBox ID="txtName" runat="server" Text='<%# Bind("name") %>' CssClass="textbox"></asp:TextBox>
            <br /><br />
            <asp:Button runat="server" ID="cmdInsertSupplier" Text="Save" CssClass="buttonControlGreen" CommandName="Insert" OnClientClick="needToConfirm=false;" />
            <asp:Button runat="server" ID="cmdCancelSupplier" Text="Cancel" CssClass="buttonControl" CommandName="Cancel" OnClientClick="needToConfirm=false;" />
        </InsertItemTemplate>
    </asp:FormView>
</asp:Panel>

ItemInserted イベントのコード ビハインドは次のとおりです。

protected void fvAddSupplier_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
    fvAddSupplier_CommandCompletion(e.Exception, e.KeepInInsertMode, "Inserted");
}

protected void fvAddSupplier_CommandCompletion(Exception sqlException, bool keepInMode, String procedureExecuted)
{
    Panel pnlAddSupplier = (Panel)fvProduct.FindControl("pnlAddSupplier");
    Label lblAddSupplierError = (Label)pnlAddSupplier.FindControl("lblAddSupplierError");

    if (sqlException != null)
    {
        keepInMode = true;
    }
}

Response.Redirect を呼び出してページ全体を更新すると、ドロップダウンリストが更新されますが、とにかく PostBack でこれが発生すると思いますか? レコードが挿入されたら、ドロップダウンリストで DataBind を呼び出してみましたが、次のエラーが表示されます。

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

私はasp.netに比較的慣れていないため、明らかな何かが欠けている可能性があります。助けていただければ幸いです。

4

0 に答える 0