- PR -

[C#]DataGrid内でのDropDownListの処理

1
投稿者投稿内容
Leaf
会議室デビュー日: 2006/06/02
投稿数: 4
お住まい・勤務地: 名古屋
投稿日時: 2006-06-02 11:34
はじめまして。よろしくお願いします。

・環境
 Visual Studio.NET2003(Visual C#.NET)
 Webアプリケーション

・内容
DataGridのフッターにて、DropDownListを3つ使用して
選択された項目に応じてリストの項目を変化させる物を作ろうとしています。
項目はデータベースから取得しており、その中のコードを使用して
項目を絞込みをかけて表示させようとしています。

|DB-A (DropDown-1)
|-A-Code- -A-Name-
| 1       A1
| 2       A2


|DB-B (DropDown-2)
|-A-Code- -B-Code- -B-Name-
| 1       1       B1
| 1       2       B2
| 2       1       B3

|DB-C (DropDown-3)
|-A-Code- -B-Code- -C-Code- -C-Name-
| 1       1       1       C1
| 1       1       2       C2
| 1       2       1       C3
| 1       2       2       C4

例)
DropDown-1が「A1」
DropDown-2が「B1」の場合、
DropDown-3にはC1とC2の項目を表示

DropDown-1が「A1」
DropDown-2が「B2」の場合、
DropDown-3にはC3とC4の項目を表示

処理としては、
1、DropDown-1で選択している項目のValue(DD1)を取得
2、DD1を使用して、DB-Bに問い合わせを行い、結果をDropDown-2に表示し、
  初期値をセットする
3、DropDown-1で選択している項目のValue(DD1)を取得
4、DropDown-2で選択している項目のValue(DD2)を取得
5、DD1とDD2を使用して、DB-Cに問い合わせを行い、結果をDropDown-2に表示し、
  初期値をセットする

*DropDown-1を変更した場合は1〜5の処理を
DropDown-2を変更した場合は3〜5の処理を行う

・質問点
*DataGrid内のDropDownの選択項目を変更する際、どのようなEventが発生しているのか
*DropDown部のSelectedValueの値の取得はどうすればよいか
思い当たる関数(コマンド?)は検索やMSDNを参照して試してみたのですが、うまくいきません、、、

わかりにくい文章で申し訳ありません…
ご存知の方、ご教授の方よろしくおねがいします。

[ メッセージ編集済み 編集者: Leaf 編集日時 2006-06-02 11:37 ]

[ メッセージ編集済み 編集者: Leaf 編集日時 2006-06-02 11:37 ]

[ メッセージ編集済み 編集者: Leaf 編集日時 2006-06-02 13:05 ]
しょくぱん
常連さん
会議室デビュー日: 2006/05/31
投稿数: 31
投稿日時: 2006-06-02 12:48
私も以前、似たような処理(webアプリで)をしたことがあります。
それを応用して書いてみました。

まず、デザイナのHTMLでフッタ行においたドロップダウンを以下のように記述します。
ポイントはAutoPostBackとOnSelectedIndexChangedです。
<FooterTemplate>
  <asp:DropDownList id="DropDown-1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDown-1_SelectedChanged"></asp:DropDownList>
</FooterTemplate>

そいで、サーバー側の処理として以下のイベント処理を書く。
protected void DropDown-1_SelectedChanged(object sender, EventArgs e)
{
  DataGridItem dgi = null;
  DropDownList ddl = null;
  foreach(Control ctrl in DataGrid1.Controls)
  {
    foreach (Control childC in ctrl.Controls)
    {
      dgi = (DataGridItem)childC;
      if (dgi.ItemType == ListItemType.Footer)
      {
        ddl = (DropDownList)dgi.FindControl("DropDown-1");
        if (ddl != null)
        {
          //ここでドロップダウンのSelectedValue等を取得
        }
      }
    }
  }
}

この記述を3つ分書けばできませんか?

あまりスマートではないかもしれないですが、
私はこれで実現させました。

[ メッセージ編集済み 編集者: しょくぱん 編集日時 2006-06-02 12:55 ]
Leaf
会議室デビュー日: 2006/06/02
投稿数: 4
お住まい・勤務地: 名古屋
投稿日時: 2006-06-02 13:45
>>しょくぱんさん
このソースを使って無事解決できました。
ありがとうございましたm(._.)m
Leaf
会議室デビュー日: 2006/06/02
投稿数: 4
お住まい・勤務地: 名古屋
投稿日時: 2006-06-02 15:56
すみません、、、追加で質問です。
DropDownの項目を変更した際に、DropDownの表示項目が一番上の項目に
セットされてしまいます。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8730&forum=7
↑などを参考に試してみたのですがかわりませんでした。


ご存知の方、ご教授よろしくお願いします。
しょくぱん
常連さん
会議室デビュー日: 2006/05/31
投稿数: 31
投稿日時: 2006-06-02 17:54
状況がちょっとわかりにくいので、確認させてください。

DropDown-1の選択を変更した後にDropDown-2の項目を設定し、
そのときDropDown-2の初期値を設定したい、ということでしょうか?
Leaf
会議室デビュー日: 2006/06/02
投稿数: 4
お住まい・勤務地: 名古屋
投稿日時: 2006-06-02 18:13
引用:

しょくぱんさんの書き込み

DropDown-1の選択を変更した後にDropDown-2の項目を設定し、
そのときDropDown-2の初期値を設定したい、ということでしょうか?



すみません 説明不足でした。

・DropDown1の項目を変更する場合
1、DropDown1の項目を変更・選択した際に、Auto-PostBackが入ります。
2、Page_Load部が処理されます。
  このときは何も処理を行っていません。
3、SelectedChangedイベントが開始されます。
処理内容:
A)DropDown1で変更した項目のValue(D1-val)を取得
B)D1-valを使用してsqlDataAdapterよりDataSet(DS1)へデータを格納
C)DS1のデータをDropDown2へバインド
4、画面の表示

となっています。
このとき、1で選択したDropDown1の値を、4の画面にも反映させたいのですが、
リストの一番上の項目になってしまいます。

しょくぱん
常連さん
会議室デビュー日: 2006/05/31
投稿数: 31
投稿日時: 2006-06-02 19:17
むむむ。
私が試すと、何もせずともDropDown1は値を保持しています。。。
何が違うんでしょう?
お役に立てずスイマセン・・・。
1

スキルアップ/キャリアアップ(JOB@IT)