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に比較的慣れていないため、明らかな何かが欠けている可能性があります。助けていただければ幸いです。