トップ回答者
DropDownListで指定したSqlDataSourceを使えない

質問
-
いつも参考にさせていただいております
Visual Studio 2008でASP.netの学習をしています。今回、DropDownListを作成したのですが
DropDownListの「データソースの選択」でsqlDataSource2を指定し後、「DataBindingsの編集」、「データソースの構成」設定をしましたが次のようなエラーが出てしまいます
'/WebYoyaku' アプリケーションでサーバー エラーが発生しました。
DataBinding: 'System.Data.DataRowView' には staff_bango という名前のプロパティは含まれません。
ちなみに、同じDropDownListで「データソースの選択」としてsqlDataSource1を指定し「DataBindingsの編集」、「データソースの構成」設定を行うと上記のエラーはでずそれなりの結果が得られます。「DataBindingsの編集」画面で「Selected Valueのバインド」で「フィールドのバインド」を選択すると選択リストには(データソースの選択でsqlDataSource2を設定したにもかかわらず)sqlDataSource1の項目が出力されてしまいます。やむを得ず「カスタムバインド」で式を指定すると上記のようなエラーが発生してしまいます。なお、データソースは2つあります。
【教示いただきたい点】
DropDownListで希望するsqlDataSourceからデータを抽出するにはどのようにしたらいいのでしょうか
よろしくお願いします
わかばマーク
回答
-
> staff_bangoはDT_staff tblにあります。
たぶん、DT_kokyaku テーブルの方に staff_bango がないから、
SelectedValue='<%# Bind("staff_bango") %>'
のところでエラーになるのだと思います。
各テーブルの構造はどうなっていますか? DT_staff テーブルの staff_bango
に相当するフィールドが DT_kokyaku テーブルにありますか?#SELECT クエリで * を使うのはなるべく避けた方がいいです。
- 回答としてマーク TasCal 2010年4月11日 11:58
すべての返信
-
> DropDownListで希望するsqlDataSourceからデータを抽出する
> にはどのようにしたらいいのでしょうかsqlDataSource1 とか 2 とか言われても内容が分からないので、
具体的にどうすればよいかはコメントできないですが、基本的
には以下のようにすればできます。<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:Northwind %>"
SelectCommand="SELECT [CategoryID], [CategoryName] FROM [Categories]">
</asp:SqlDataSource>
<asp:DropDownList ID="DropDownList3"
runat="server"
DataSourceID="SqlDataSource1"
DataTextField="CategoryName"
DataValueField="CategoryID">
</asp:DropDownList>上記はデザイナ画面でウィザードベースで作ったもので、自分で
は一行もコードを書いていません。 -
SuferOnWwwさん回答いただきありがとうございます。
説明不足でしたのでコードを以下のように添付します。以下のコードはすべてデザイナ画面のウィザードで作成し自分で手を加えた部分はありません。コードはそれなりに作成されていると思いますが結果は最初に投稿したようになってしまいます。
Templateは<EditItemTemplate>, <InsertItemTemplate>,</ItemTemplate>の3つを使用しています。問題のDropdownListは<EditItemTemplate>と<InsertItemTemplate>にあります。staff_bangoはDT_staff tblにあります。
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:FormView ID="FormView1" runat="server"
DataKeyNames="kokyaku_bango" DataSourceID="SqlDataSource1"
onpageindexchanging="FormView1_PageIndexChanging" OnItemInserting="FormView1_ItemInserting" OnItemCommand="FormView1_ItemCommand">
<EditItemTemplate>・・・・・・・ 途中略 ・・・・・・・・・
主担当スタッフ番号</td>
<td class="tableStyle2">
<asp:DropDownList ID="DropDownList2" runat="server"
DataSourceID="SqlDataSource2" DataTextField="sei" DataValueField="staff_bango"
SelectedValue='<%# Bind("staff_bango") %>'>
<asp:ListItem Value="0">(選択してください)</asp:ListItem>
</asp:DropDownList>
</td>
</tr>・・・・・・・ 途中略 ・・・・・・・・・
</EditItemTemplate>
<InsertItemTemplate>・・・・・・・ 途中略 ・・・・・・・・・
主担当スタッフ番号</td>
<td class="tableStyle2">
<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="True"
DataSourceID="SqlDataSource2" DataTextField="sei" DataValueField="staff_bango"
SelectedValue='<%# Bind("Staff_bango") %>'>
<asp:ListItem Value="0">(選択してください)</asp:ListItem>
</asp:DropDownList>
</td>・・・・・・・ 途中略 ・・・・・・・・・
</InsertItemTemplate>
<ItemTemplate>・・・・・・・ 途中略 ・・・・・・・・・
</ItemTemplate>
</asp:FormView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:WebYoyakuConnectionString %>"
SelectCommand="SELECT * FROM [DT_kokyaku] WHERE ([kokyaku_bango] = @kokyaku_bango)">
<SelectParameters>
<asp:QueryStringParameter Name="kokyaku_bango" QueryStringField="id"
Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:WebYoyakuConnectionString %>"
SelectCommand="SELECT * FROM [DT_staff]">
</asp:SqlDataSource>
</asp:Content>今回のエラーはコードの最初の部分
DataKeyNames="kokyaku_bango" DataSourceID="SqlDataSource1"
onpageindexchanging="FormView1_PageIndexChanging" OnItemInserting="FormView1_ItemInserting" OnItemCommand="FormView1_ItemCommand">
が影響しているのでしょうか?SqlDatasource2にはSqlDatasource1のような定義文がないのですがいいのでしょうか?長々となりましたがよろしくお願いします
わかばマーク -
> staff_bangoはDT_staff tblにあります。
たぶん、DT_kokyaku テーブルの方に staff_bango がないから、
SelectedValue='<%# Bind("staff_bango") %>'
のところでエラーになるのだと思います。
各テーブルの構造はどうなっていますか? DT_staff テーブルの staff_bango
に相当するフィールドが DT_kokyaku テーブルにありますか?#SELECT クエリで * を使うのはなるべく避けた方がいいです。
- 回答としてマーク TasCal 2010年4月11日 11:58
-
>各テーブルの構造はどうなっていますか? DT_staff テーブルの staff_bango
>に相当するフィールドが DT_kokyaku テーブルにありますか?DT_kokyakuにはsyutanto_staff_bangoがありそれがDT_staffのstaff_bangoに相当します
SelectedValue='<%# Bind("staff_bango") %>'でstaff_bangoをsyutanto_staff_bangoに変更したら解決しました!
Bindの意味を理解していませんでした。ありがとうございました。
わかばマーク