none
Formviewに連携するdropdownlistの設置について RRS feed

  • 質問

  • 当方超初心者です(VS2010、VB、SQLserver2008R2 ASP.net4.0)

    フォーラムにおいていろいろ参照させていただいたのですが、理解できないので質問をさせていただきます

    formview内において、1つ目のdropdownで絞り込んだ物品のメーカー名を2つ目のdropdownに表示させたいのですが、質問方法もよくわかりません。長い時間お手数をおかけすることとなりますが、お答えして頂ける方がいらっしゃればよろしくお願いします。

    dropdown7は機種名リスト(sql13) dropdown8はメーカー名リスト(sql14)です

    以下コードです

     <td>
                                機種名</td>
                            <td>
                                <asp:DropDownList ID="DropDownList7" runat="server" AutoPostBack="True"
                                    DataSourceID="SqlDataSource13" DataTextField="machine_name"
                                    DataValueField="machineID">
                                </asp:DropDownList>
                                <asp:SqlDataSource ID="SqlDataSource13" runat="server"
                                    ConnectionString="<%$ ConnectionStrings:hi_keyConnectionString %>"
                                    SelectCommand="SELECT [machineID], [machine_name], [id], [machine_companyID] FROM [tbl_machine] WHERE ([id] = @id)">
                                    <SelectParameters>
                                        <asp:ControlParameter ControlID="DropDownList3" Name="id"
                                            PropertyName="SelectedValue" Type="Int32" />
                                    </SelectParameters>
                                </asp:SqlDataSource>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                メーカー名</td>
                            <td>
                                <asp:DropDownList ID="DropDownList8" runat="server" AutoPostBack="True"
                                    DataSourceID="SqlDataSource14" DataTextField="machine_companyID"
                                    DataValueField="machine_companyID">
                                </asp:DropDownList>
                                <asp:SqlDataSource ID="SqlDataSource14" runat="server"
                                    ConnectionString="<%$ ConnectionStrings:hi_keyConnectionString %>"
                                    SelectCommand="SELECT [machine_companyID], [machine_company_name] FROM [tbl_machine_company] WHERE ([machine_companyID] = @machine_companyID)">
                                    <SelectParameters>
                                        <asp:ControlParameter ControlID="DropDownList7" Name="machine_companyID"
                                            PropertyName="SelectedValue" Type="Int16" />
                                    </SelectParameters>
                                </asp:SqlDataSource>
                            </td>

     

       Protected Sub SqlDataSource5_Updating(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles SqlDataSource5.Updating
            e.Command.Parameters("@machineID").Value =
                         CType(FormView1.FindControl("DropDownList7"), DropDownList).SelectedValue
            e.Command.Parameters("@machine_companyID").Value =
                CType(FormView1.FindControl("DropDownList8"), DropDownList).SelectedValue
        End Sub

        Protected Sub FormView1_DataBound(sender As Object, e As System.EventArgs) Handles FormView1.DataBound
            If FormView1.CurrentMode = FormViewMode.Edit Then
                CType(FormView1.FindControl("DropDownList8"), DropDownList).SelectedValue =
                                              FormView1.DataItem("machine_companyID")
            End If
        End Sub

    2012年1月30日 5:24

回答

  • > 改めて、LabelのBoundのお話をさせていただけないでしょうか?

    ユーザーに表示する項目(名前)と DB に入力する項目(ID)が違
    うことを失念していました。

    Label からは ID が取得できないので、DropDownList の時のように
    簡単にはいかないです。Label.Text には名前を設定して、それとは
    別に隠しフィードを設けて ID を保持するような仕組みが必要です。


    > また、機種名(machineID)のDropDownListですが、AJAXのComboBox
    > で検索できるようにしたいのですが、別質問としてあげたほうがよ
    > ろしいでしょうか?

    表題と違うことは、新にスレッドを立てて質問してください。

    なお、別スレッドでもレスしましたが、AJAX Control Toolkit の
    ComboBox は日本語に対応していないようです。質問する前に、自
    分で試してみて、目的に合っているかどうか確認してから質問する
    ようにしてください。

    • 回答としてマーク kazukazu2002 2012年3月7日 4:09
    2012年2月13日 12:13

すべての返信

  • SQLを見ると、ドロップダウンから選んだ機種名のmachine_companyIDを元にメーカー名を絞り込んでいるようですが、絞り込んだ際に必ず一つしか抽出されないように見えます。つまり、メーカー名を表示するのはドロップダウンリストではなく例えばラベルでも良いように見えます。
    現状、どのような問題が発生しているのでしょうか? 例えばテーブル設計に問題があって思うように動いていないのかもしれません。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2012年1月30日 5:47
    モデレータ
  • 早速の返信ありがとうございます

    問題は機種名を選択したときに、メーカー名が機種IDになっていることです。メーカーIDが表示されてほしいのですが、どこがおかしいのかわからない状態です。

    テーブル設計の問題点も何なのかわかっておりません。

    大変申し訳ありません。どこをどう見ればよいのでしょうか?

    2012年1月30日 5:57
  • 現在、メーカー名(DropDownList8)に機種ID(machineID)が表示されており、そうではなく、メーカーID(machine_companyID)を表示したいということでしょうか?
    コードを見る限り、DropDownList8にmachineIDが表示されることはありえないと思います。machineIDに見えて、実はmachine_companyIDであるということはないでしょうか?
    テーブルに設定されているデータを今一度確認してみて下さい。

    #メーカーID、機種IDと唐突に書かれても、コード上でどの項目のことを指されているのかはっきりわかりませんので、コードではどの項目に対応するのかを書くようにされると問題点がより明確に伝わります。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2012年1月30日 6:27
    モデレータ
  • 返信ありがとうございます

    メーカー名(DropDownList8)に機種ID(machineID)が表示されており、そうではなく、メーカーID(machine_companyID)を表示したいということでしょうか?

    その通りです

    formviewのsqldatasource5(shop_machineID、machineID、machine_companyID)で、このテーブルに新規で登録をする際に、{機種名(dropdownlist7)→機種(sqldatasouce13)テーブルにはmachineID、machine_name、machine_companyIDがあります

    メーカー名(dropdownlist8)→メーカー(sqldatasouce14)テーブルにはmachine_companyID、machine_company_nameがあります}

    機種名をdropdownlist7で選択するとその機種に登録された(sqldatasouce13)のmachine_companyIDをdropdownlist8で拾ってmachine_company_nameを表示したいのです

    質問がこのような形でよいのか失礼ではないか心配です。

    なにとぞお力をお貸しください。極力問い合わせにお答えできるように致しますので、どうか成功まで導いてくださいますようよろしくお願いいたします

    追記:

    デバックを実行するとNullreferenceExceptionはユーザーコードによってハンドルされませんでした と出ます

    トラブルシューティングのヒント

    オブジェクトインスタンスの作成にはnewキーワードを使用します

    メソッドを呼び出す前に、オブジェクトがNullでよいかどうか確認してください

    と CType(FormView1.FindControl("DropDownList8"), DropDownList).SelectedValue =
                                              FormView1.DataItem("machine_companyID")

    で出ます

    2012年1月30日 7:04
  • 機種名をdropdownlist7で選択するとその機種に登録された(sqldatasouce13)のmachine_companyIDをdropdownlist8で拾ってmachine_company_nameを表示したいのです

    machine_company_nameを表示されたいのでしょうか? であれば、DropDownList8のDataTextFieldが現在、以下のようになっていますので、

    DataTextField="machine_companyID"

    これを、以下のように変えるだけです。

    DataTextField="machine_company_name"

    自分の思い通りにならない場合は、まずMSDNを確認するようにして下さい。

    DropDownList プロパティ
    http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.dropdownlist_properties(v=vs.100).aspx

    DropDownListに表示する項目を指定するのはDataTextFieldになります。

    初心者のころはMSDNは少し読みにくいかもしれませんが、そのうちに慣れますのでがんばって読むようにして下さい。

    返デバックを実行するとNullreferenceExceptionはユーザーコードによってハンドルされませんでした と出ます

    おそらく、FormViewのDataBindイベントではまだDropDownList8が生成されていないのでしょう。DataBindイベントではなく、ItemCreatedイベントで試してみて下さい。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク 山本春海 2012年2月17日 9:01
    • 回答としてマークされていない kazukazu2002 2012年3月7日 0:56
    2012年1月30日 7:43
    モデレータ
  • どこまでうまくいっていて、どこから期待通りにならないのでしょう?

    最初の質問のコードで、コントロールの ID が合っているでしょうか?
    うまくいかないので、いじりまくった結果、不整合があるように見えま
    す。そうであれば、一度全体を見直して、さらに問題を再現するのに必
    要最小限に削って、その結果をアップしてください。

    コードはどこかで見たことがあるような気がしますが、公開されている
    サイトのコードを参考にしたのなら、その URL を教えてください。

     

    2012年1月30日 21:42
  • おはようございます

    先日からのお返事が遅れてもうしわけありません

    まず参照URLですがこちらです

    http://social.msdn.microsoft.com/Forums/ja/aspnetja/thread/fed6732d-07ee-4f7e-ac0d-2a462bb16587

    先日の最後にお教えいただいた部分をdatabindではなくitemcreatedで試しましたがまた、

     CType(FormView1.FindControl("DropDownList8"), DropDownList).SelectedValue =
                                              FormView1.DataItem("machine_companyID")

    の部分でNullreferenceExceptionはユーザーコードによってハンドルされませんでした と出ます

    MSDNは本当に読みにくいです フォーラムや質問箱などいろいろ調べて解決策が何なのか分からない状態です

    うまくいったのはformview外からのdropdownlist絞り込みでformview内が表示されたことです。

    うまくいかなかったことは外から絞り込み表示されたformviewの中でdropdownlist7で選択したmachineID(表示はmachine_name)(機種)のmachine_companyID(表示はmachine_company_name)(メーカー)がdropdownlist8に表示されないことです

    うまく質問出来てますでしょうか?的外れでないでしょうか?

    2012年1月30日 23:56
  • > まず参照URLですがこちらです

    そのスレッドでは最終的にどのようにしたかが不明で、あまり参考になら
    なかったのではないかと思います。

    DetailsView や FormView を使っての Update 操作で、DropDownList を 2 つ
    配置して SelectedValue をデータバインドして('<%# Bind("XXX")%>' の
    ように設定して)絞込みを行う場合、1 つめの DropDownList のアイテム
    の選択を変更すると、"Eval()、XPath()、および Bind() のようなデータ
    バインドメソッドは、データバインドされたコントロールのコンテキスト
    でのみ使用することができます。" というエラーになります。

    それをどのように回避して期待した動作をさせるかが問題です。その点に
    ついては、以下のページが参考になりませんか?

    DetailsView 中の連動 DropDownList
    http://surferonwww.info/BlogEngine/post/2010/12/04/Dual-DropDownLists-in-DetailsView.aspx

    DetailsView のケースですが、FormView でも注意すべき点は同じです。

    また、C# が全く読めなければ VB.NET に変換してくれるサイトがあります
    ので、そこで変換してみてください。

    http://www.developerfusion.com/tools/convert/csharp-to-vb/


    以上のレスで解決できなければ、前にも書きましたが、コントロールの
    ID その他に不整合がないか一度全体を見直して、さらに問題を再現す
    るのに必 要最小限にコードを削ってアップしてください。

    それをしてもらえないと、その先に進むのは難しそうです。


    #コードだけでなく、文章の中でも大文字小文字、半角全角をしっかり区別
    #する(formview などと書かないで FormView と書く)、一般的でない略
    #名は使わない(dropdown ではなくて DropDownList と書く)ようにしま
    #しょう。

     


    • 編集済み SurferOnWww 2012年1月31日 14:17 誤記訂正
    • 回答としてマーク 山本春海 2012年2月17日 9:00
    • 回答としてマークされていない kazukazu2002 2012年3月7日 0:56
    2012年1月31日 13:36
  • おはようございます。御返答ありがとうございます。

    本日、参考ページを見てトライしてみようと思います(見たことのあるページですが)そのページの内容で分からない点がありましたらまたお聞きしてもよろしいでしょうか?

    最小限のコードもアップいたしますのでよろしくお願いいたします。→削除しました。

    書き方について失礼を致しましたことをお詫び申し上げます。

    ちなみに、変換ですが、ページに掲載されているaspxのコードをすべてコピペでConvert to VB.NETのボタンを押すだけでしょうか?

    line1col1:EOF expectedと表示されて変換されていないようなのですが、どうやって変換したらよろしいのでしょうか?


    2012年2月1日 0:23
  • > そのページの内容で分からない点がありましたらまたお聞きしても
    > よろしいでしょうか?

    どうぞ聞いてください。ただし、まず自分で調べてからどうしてもわ
    からない点を質問するようお願いします。


    > ちなみに、変換ですが、ページに掲載されているaspxのコードを
    > すべてコピペでConvert to VB.NETのボタンを押すだけでしょうか?

    C# のコードの部分だけです。即ち、<script runat="server"> から
    </script> の間の部分(script タグは含まず)だけです。


    > 最小限のコードもアップいたしますのでよろしくお願いいたします。

    それをするのは、先のレスで書いた「以上のレスで解決できなけれ
    ば」ということでお願いします。

    それに、アップされたコードは最小限になっていません。逆に、肝心
    なコードビハインドの部分が一切提示されていません。

    先のレスの「問題を再現するのに必要最小限にコードを削って」の意
    味を理解されているでしょうか?

    問題は DropDownList を操作しても表示が期待通りにならないことだ
    ったはずですが、その問題を再現するだけのコードなら 100 行もあれ
    ば書けるはずで、コードビハインドを含めてそこまで削ってからアッ
    プしてください。

    問題の切り分けに有効なのは、問題を再現できる必要最小限までコー
    ドを削ってみることです。その過程で、問題を見つけることができ、
    自力で解決できることも多いのです。

    たとえ自力で解決できなくても、そのコードをアップして質問すれば、
    有益な回答が得やすいし、コードを削る手間をかけても結局はその方
    が解決は早いと思います。

    ただし、今回のような余計な部分がいっぱい含まれた長~いコードを
    べたっと貼り付けるのはダメです。誰も見てくれません。

     

    2012年2月1日 12:29
  • おはようございます

    先日は失礼いたしました。正直な話ですが、必要最小限といわれる部分をわかっていないのが正直なところです。

    申し訳ありません。コードは削除しました。

    先のページの部分で、C#からVBに変換し、それを参照しながらコードの意味もよくわからず書いてみましたが、

    Protected Sub FormView1_DataBound(sender As Object, e As System.EventArgs) Handles FormView1.DataBound
            If FormView1.CurrentMode = FormViewMode.Edit Then
                Dim ddl As DropDownList = DirectCast(FormView1.FindControl("DropDownList8"), DropDownList)
                ddl.SelectedValue = DirectCast(FormView1.DataItem, Data.DataRowView)("machine_companyID").ToString()←ここでSystem.NullreferenceExceptionはユーザーコードによってハンドルされませんでした。オブジェクト参照がオブジェクトインスタンスに設定されていませんとでます。

    大変お手数おかけいたします。

    コードビハインドの部分とはこちらのことでしょうか?

    Partial Class test
        Inherits System.Web.UI.Page

        Protected Sub SqlDataSource5_Inserting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles SqlDataSource5.Inserting
            Dim ddl As DropDownList = DirectCast(FormView1.FindControl("DropDownList9"), DropDownList)
            e.Command.Parameters("machineID").Value = ddl.SelectedValue
            ddl = DirectCast(DetailsView1.FindControl("DropDownList10"), DropDownList)
            e.Command.Parameters("machine_companyID").Value = ddl.SelectedValue
        End Sub

        Protected Sub SqlDataSource5_Updating(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles SqlDataSource5.Updating
            Dim ddl As DropDownList = DirectCast(FormView1.FindControl("DropDownList8"), DropDownList)
            e.Command.Parameters("machine_companyID").Value = ddl.SelectedValue
        End Sub

        Protected Sub FormView1_DataBound(sender As Object, e As System.EventArgs) Handles FormView1.DataBound
            If FormView1.CurrentMode = FormViewMode.Edit Then
                Dim ddl As DropDownList = DirectCast(FormView1.FindControl("DropDownList8"), DropDownList)
                ddl.SelectedValue = DirectCast(FormView1.DataItem, Data.DataRowView)("machine_companyID").ToString()
            End If
        End Sub
    End Class

    勉強不足の私にお忙しい時間を割いてお付き合いして頂いているのは重々承知しております。本当に申し訳ありません。


    追記:こういったコードについて勉強になるような(できれば分かりやすい)書籍をご存じないでしょうか?高価な本から、ビギナーの本まで購入し、何度も読みながらですが、思い通りにならなくて..

    2012年2月2日 0:56
  • > それを参照しながらコードの意味もよくわからず書いてみましたが、

    問題があると分っている部分なのですから、コードの意味は 100% 理
    解しないと・・・  2 行しかないのですから、少し調べれば分ると
    思います。調べても分らなければ聞いてください。

    なお、C# ⇒ VB.NET 変換サイトの変換はかなり正確ですが完全では
    ないです。なので、コピペするだけでなく、正しいことを自分の目で
    見て確認してください。


    > System.NullreferenceExceptionはユーザーコードによってハンド
    > ルされませんでした。

    前にレスしましたが、コントロールの ID や変数の名前は整合が取
    れていることは確認しましたか?

    NullreferenceException はオブジェクトが取得できなくて Nothing
    になっている変数を参照したからです。その意味が分からなければ
    NullreferenceException でググれば参考になるページがいくらでも
    見つかると思いますので自分で調べてください。

    意味が分かったら、デバッガでどれが Nothing になっているか調べ
    てください。それが分からないと先に進めません。

    > コードビハインドの部分とはこちらのことでしょうか?

    コード部分(xxxxx.aspx.vb ファイル)のことです。


    > こういったコードについて勉強になるような(できれば分かりやす
    > い)書籍をご存じないでしょうか?

    本は自分で本屋に行って、自分の目で見て、自分で選ぶ他ないと思い
    ます。ここの回答者には、質問者さんの好みやレベルは分かりません
    から。

     

    2012年2月2日 13:20
  • たまたまなのですが、

    想像でこうではないかと思いやってみたところ、一度できたので、こんな方法ができるのかわかりませんのでお聞きします。

    1つ目のDropDownListのDataTextField="machine_name" DataValueField="machine_companyID"にし、

    2つ目のDropDownListのDataTextField="machine_company_name" DataValueField="machine_companyID"にすると

    なぜか1つ目でmachine_nameで選択でき、2つ目がきちんと1つ目に連動したmachine_company_nameが表示されました。

    なぜでしょう?

    2012年2月3日 2:57
  • > なぜか1つ目でmachine_nameで選択でき、2つ目がきちんと 1つ目に連動した
    > machine_company_nameが表示されました。

    たぶんそれではダメだと思います。

    一番最初の質問のコードから DataTextField と DataValueField を変更しただ
    けだと思いますが、そうだとすると、うまくいったのは DropDownList の表示
    だけで、DB の更新がうまくいかないはずです。

    DB の「機種名」フィールドを DropDownList7.SelectedValue で更新するのです
    よね。「機種名」フィールドは machineID でなければならないはずですが、
    DropDownList7.SelectedValue は machine_companyID になってしまいます。

    1 つ目、2 つ目どちらも tbl_machine テーブルから SELECT しないとうまくい
    かないでしょう。2 つ目に tbl_machine テーブルには含まれない
    machine_company_name を表示するのは、tbl_machine_company テーブルを
    INNER JOIN してやれば可能です。

    ところで、1 つ目で機種が決まればそれに該当するメーカは 1 社だけに絞られ
    るのではないですか? であれば、trapemiya さんも指摘されていますように、
    2 つ目は DropDownList である必要はなく、Label でいいのでは?

    それから、FormView1_DataBound ハンドラでの NullreferenceException の問
    題はどうなったのですか?

    2012年2月7日 13:08
  • SurferOnWww様、御回答ありがとうございます。

    それから、FormView1_DataBound ハンドラでの NullreferenceException の問
    題はどうなったのですか?>

    正直解決方法がわかりません。

    ところで、1 つ目で機種が決まればそれに該当するメーカは 1 社だけに絞られ
    るのではないですか? であれば、trapemiya さんも指摘されていますように、
    2 つ目は DropDownList である必要はなく、Label でいいのでは?>

    LabelでどうBindしたらよろしいのでしょうか?

    絞り込みは4段階あるのですが、同様にできるのでしょうか?

    どう行うのかがわからない状態です。何を調べれば参考になりますでしょうか?


    2012年2月8日 0:57
  • > 正直解決方法がわかりません。

    解決方法は以前のレスで書きました(コントロールの ID や変数
    の名前は整合が取れていることを確認。そのあとデバッガで何が
    Nothing になっているか調べる)。それはやってもらえたでしょ
    うか?

    デバッガの使い方がわからないなら、ググって調べるなどして勉
    強してください。デバッガが使えないと開発はできません。

    何が null(VB では Nothing)になっているか調べてもらわない
    ことには、その先に話が進みません。


    > LabelでどうBindしたらよろしいのでしょうか?
    > 絞り込みは4段階あるのですが、同様にできるのでしょうか?
    > どう行うのかがわからない状態です。何を調べれば参考になりま
    > すでしょうか?

    今の問題を解決して DropDownList での表示がうまくいってから
    具体的な方法を考えましょう。(今回の問題とは直接関係ないの
    で)

    2012年2月8日 13:03
  • 先に御指摘があった部分を別の個所(同じFormView内)ですが、試してみたところ、(地域、店舗名)←先の件で言うところの(機種名、メーカー名)がうまく動きました。(Insertもきちんと反映されました)

    一度最初からやり直したところSystem.Dataの宣言がなされていなかったのが原因でした。

    が、機種名、メーカー名で同じことを行おうとしたのですが、

    Protected Sub FormView1_DataBound(sender As Object, e As System.EventArgs) Handles FormView1.DataBound
            If FormView1.CurrentMode = FormViewMode.Edit Then
                Dim ddl As DropDownList = DirectCast(FormView1.FindControl("DropDownList6"), DropDownList)
                ddl.SelectedValue = DirectCast(FormView1.DataItem, DataRowView)("shopID").ToString()
            End If
        End Sub

        Protected Sub SqlDataSource1_Inserting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles SqlDataSource1.Inserting
            Dim ddl As DropDownList = DirectCast(FormView1.FindControl("DropDownList3"), DropDownList)
            e.Command.Parameters("@areaID").Value = ddl.SelectedValue
            ddl = DirectCast(FormView1.FindControl("DropDownList4"), DropDownList)
            e.Command.Parameters("@shopID").Value = ddl.SelectedValue
        End Sub

        Protected Sub SqlDataSource1_Updating(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles SqlDataSource1.Updating
            Dim ddl As DropDownList = DirectCast(FormView1.FindControl("DropDownList6"), DropDownList)
            e.Command.Parameters("@shopID").Value = ddl.SelectedValue
        End Sub

    FormView1のDataBoundおよび、SqlDataSource1のInserting、Updatingにどう追加したらよろしいのでしょうか?

    2012年2月9日 4:14
  • 追記、そのまま構文を直下に羅列したところ、FormView1_DataBoundのIf文は追加できましたが、

    SqlDataSource1_InsertingおよびUpdatingはDim ddlが重複宣言されていますとエラーが出ます。なぜでしょう?

    2012年2月9日 4:17
  • > 追記、そのまま構文を直下に羅列したところ、FormView1_DataBound のIf文は
    > 追加できましたが、SqlDataSource1_Insertingおよび UpdatingはDim ddlが
    > 重複宣言されていますとエラーが出ます。なぜでしょう?

    「そのまま構文を直下に羅列」というのは、以下のようなことをしたというこ
    とですか?

    Protected Sub SqlDataSource1_Updating(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles SqlDataSource1.Updating
      Dim ddl As DropDownList = DirectCast(FormView1.FindControl("DropDownList6"), DropDownList)
      e.Command.Parameters("@shopID").Value = ddl.SelectedValue
    
      ' 以下を追加
      Dim ddl As DropDownList = DirectCast(FormView1.FindControl("DropDownList8"), DropDownList)
      e.Command.Parameters("machine_companyID").Value = ddl.SelectedValue
    End Sub

    それで「ddl が重複宣言されています」というエラーが出たけど、何が問題か
    わからないということですか?

    もし上記のようにした結果であれば、 2 つ目以降の Dim ddl As DropDownList
    を ddl にすれば出なくなると思います。

    でも、そうだとすると、kazukazu2002 さんはプログラミングの知識(しかもご
    く基本的な)がないということを意味するのですが、そうなんですか?

    基本的な知識がないのでは話が通じないですよね。今までのレスもほとんど理解
    できていなかったのではないですか。それなのに掲示板でのやり取りでプログラ
    ミングの問題を解決しようなんてのは無理だと思いませんか。プログラミングを
    勉強して、話が通じる程度に知識を付けてから再度挑戦してはどうですか。


    • 編集済み SurferOnWww 2012年2月9日 12:31 誤記訂正
    • 回答としてマーク kazukazu2002 2012年2月14日 0:20
    • 回答としてマークされていない kazukazu2002 2012年3月7日 0:57
    2012年2月9日 12:30
  • 御返信ありがとうございます。
    その通りです。お恥ずかしい話
    業務命令でやることになり、基本の勉強と同時進行で、作成をしております。
    ほとんどが、書籍の中から必要なところを引用しており、中身は少しずつ理解をしようとしております。
    やり方は間違っていると思いますが、できなければ今のご時世ですのでどうなる事かとヒヤヒヤしながら結果を出そうとしています。
    先の問い合わせの分で行ってみます。
    どうかお付き合いをいただけませんでしょうか?

    追記:

    御回答いただいたものでFormViewのInsertItemTempleteデフォルトでの表示、選択、登録がきちんとできました。ありがとうございます。

    ただ、EditItemTempleteでデフォルト表示にしたところ

    Protected Sub FormView1_DataBound(sender As Object, e As System.EventArgs) Handles FormView1.DataBound
            If FormView1.CurrentMode = FormViewMode.Edit Then
                Dim ddl As DropDownList = DirectCast(FormView1.FindControl("DropDownList6"), DropDownList)
                ddl.SelectedValue = DirectCast(FormView1.DataItem, DataRowView)("shopID").ToString()
            End If

    太字の部分でddlとFormview1.DataItemがNothingとあり、表示ができませんでした。

    InsertItemTempleteが動けば問題はないのですが今後、編集することも考えて理解したいのですが、何を調べればよろしいでしょうか?



    2012年2月10日 0:07
  • > 太字の部分でddlとFormview1.DataItemがNothingとあり、表示ができ
    > ませんでした。
    > InsertItemTempleteが動けば問題はないのですが今後、編集すること
    > も考えて理解したいのですが、何を調べればよろしいでしょうか?

    Nothing になる原因を調べてください。

    ddl が Nothing になるのは、EditItemTemplate の中に DropDownList6
    が存在しないことぐらいしか思い当たりません。

    だから、前のレスで「コントロールの ID や変数の名前は整合が取れて
    いることを確認」と書きましたのですが、確認しましたか?

    Formview1.DataItem の方はわかりません。Edit モードでは Nothing に
    ならないはずです。間違ないか、もう一度よく調べてください。


    ところで、前は DropDownList8 と machine_companyID のはずでしたが、
    今回、DropDownList6 と shopID に変わってます。ただでさえ話が通じ
    ないのに、突然問題の対象が変ってはわけがわからなくなります。そ
    ういうところは変えてはダメです。

    2012年2月10日 14:04
  • >「コントロールの ID や変数の名前は整合が取れて
    >いることを確認」と書きましたのですが、確認しましたか?

    そうなんです。確認をしたのですが、

    >EditItemTemplate の中に DropDownList6
    >が存在しないことぐらいしか思い当たりません。

    きちんと存在しているんです。

    一度書き直して行ったため、試しに、DropDownList6 と shopIDのほうでやったところ成功し、成功したことうれしくてそのまま報告してしまいました。申し訳ありません。

    2012年2月11日 5:28
  • > 一度書き直して行ったため、試しに、DropDownList6 と shopIDのほう
    > でやったところ成功し、成功したことうれしくてそのまま報告してし
    > まいました。申し訳ありません。

    意味が分かりません。

    2012年2月11日 10:24
  • 御回答ありがとうございます。相手にされたくないほどの知識であることは承知しております。

    どうかお助けください

    今作っているFormViewのInsertモード表示が

    地域    areaID        DropDownList3

    店舗    shopID        DropDownList4

    契約店   companyID     DropDownList11

    種別    id             DropDownList2

    機種名   machineID       DropDownList1

    メーカー名machine_companyID   DropDownList10

    という形になっており、御回答いただいたとおりに行ったところ、地域からの店舗絞り込みはできました。

    また、機種名からメーカー名の絞り込みはできました。(Insert処理もきちんとできました。DBも問題なし)

    しかし、種別から機種名の絞り込みができません。

    何かエラーが出るわけでもありません。

    2種類に分ける形で、machineIDのWHERE句で選別設定はしているのですが出来ないのです

    2つまでは連動するのですが、どういった方法がありますでしょうか?


    2012年2月13日 2:24
  • 上記はSurferOnWww様の別スレ回答で解決しました。

    machineIDのDropDownList1 AppendDataBoundItemsがtrueになっていたことが原因でした。
    2012年2月13日 4:03
  • Editモードの件ですが、一から調べなおして

    >ddl が Nothing になるのは、EditItemTemplate の中に DropDownList6
    >が存在しないことぐらいしか思い当たりません。

    EditItemTemplateとInsertItemTemplateのDropDownListの番号を見間違えていたことが原因でした。

    >Formview1.DataItem の方はわかりません。Edit モードでは Nothing に
    >ならないはずです。間違ないか、もう一度よく調べてください。

    これもお恥ずかしい話で、見間違えでした。

    数々の御無礼をお許しください。ありがとうございます。
    2012年2月13日 4:30
  • 改めて、LabelのBoundのお話をさせていただけないでしょうか?

    また、機種名(machineID)のDropDownListですが、AJAXのComboBoxで検索できるようにしたいのですが、別質問としてあげたほうがよろしいでしょうか?

    2012年2月13日 4:34
  • > 改めて、LabelのBoundのお話をさせていただけないでしょうか?

    ユーザーに表示する項目(名前)と DB に入力する項目(ID)が違
    うことを失念していました。

    Label からは ID が取得できないので、DropDownList の時のように
    簡単にはいかないです。Label.Text には名前を設定して、それとは
    別に隠しフィードを設けて ID を保持するような仕組みが必要です。


    > また、機種名(machineID)のDropDownListですが、AJAXのComboBox
    > で検索できるようにしたいのですが、別質問としてあげたほうがよ
    > ろしいでしょうか?

    表題と違うことは、新にスレッドを立てて質問してください。

    なお、別スレッドでもレスしましたが、AJAX Control Toolkit の
    ComboBox は日本語に対応していないようです。質問する前に、自
    分で試してみて、目的に合っているかどうか確認してから質問する
    ようにしてください。

    • 回答としてマーク kazukazu2002 2012年3月7日 4:09
    2012年2月13日 12:13
  • 大変申し訳ありません。

    わからないことができてしまいました。上記のものはきちんと出来上がったのですが、ContentPlaceHolderを使用して行ったところ、下記エラーが出てしまいました。

    型 'DropDownList' のコントロール 'ContentPlaceHolder1_FormView1_DropDownList3' は、runat=server を含む form タグの内側に置かなければ成りません。

    実際に場所を移動しているわけでもなく、

    <asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="True"
                                DataSourceID="SqlDataSource12" DataTextField="area_name"
                                DataValueField="areaID" SelectedValue='<%# Bind("areaID") %>'
                                AppendDataBoundItems="True">
                                <asp:ListItem Value="0">選択してください</asp:ListItem>
                            </asp:DropDownList>

    という形でrunat=server を含む form タグの内側に配置しているのですが、何が問題でしょうか?

    2012年3月7日 1:02
  • すみません解決しました。

    masterpageのscriptmanagerの位置がおかしくなっていたことが原因でした。

    2012年3月7日 4:09