人気マンガがだれでも無料♪電子コミック読み放題!!

DropDownListにSqlDataSourceから
データをよみとるようにしているのですが

ページロードで
DropDownList = "123"
としても
それがちゃんと反映されません。(DropDownList =""となっています。)


別のDropDownListBでSqlDataSourceを使っていないものだと
ちゃんと
DropDownListB = "123"
でドロップダウンリストにきちんと
123が選択された状態に写るのですが、、、

どのようにしたらいいのでしょうか?
教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

はじめまして。



文面からだと、どのようにSqlDataSourceからデータを取っているのか分からないのですが、次のような感じで出来そうな気がします。

DropDownList.DataSource = SqlData(); ※
DropDownList.DataBind();

※SqlData()は、SqlDataSourceからデータを取得する記述をしてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
DropDownList.SelectedValue = "3"
でも思うような操作ができるようにはなりました。

いろいろな方法があるのですね。
回答をいただき勉強になります。

お礼日時:2010/04/18 19:06

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQLDataSourceのSQL文を変えて・・・

ASP.Net にて日々壁が立ち上がっております。

GridView のデータソースであるSQLDataSourceのSQL文を変更し、尚且つページング、ソーティングも行いたいと思うのですが、なかなかうまく行きません。

Dim SQL As String

条件が複雑なので、SQL には自作したSQL文が入っております。

Me.SqlDataSource.SelectCommand = SQL
Me.SqlDataSource.DataBind()

このように記述するとGridViewのデータはSQL文に指定した通りに表示されるのですが、ページング、ソーティングを行うと、元々SqlDataSourceに指定してあるSQL文のモノが適応されて表示画面も元データの適応になってしまいます。

何かのサイトでこういう場合は DataSourceID をどうにかすると、ページング、ソーティングともに指定したSQL文のデータソース上で行われるみたいなことが書かれていたのですが、どう記述してよいかわかりません。

例えば・・・

Me.GridView.DataSourceID = ""
Me.GridView1.DataBind()

Me.GridView1.DataSourceID = Me.SqlDataSource.ID
Me.GridView1.DataBind()

こんな記述をしてみても、ページング、ソーティングはうまく動作しません。
動的なSQL文をGridViewに適応でき、ソーティング、ページングも適応させるにはどうしたらよいでしょうか?
GridView にそういう事が簡単にできれば非常に使い勝手が良いのですが、
初心者的な考えなのかもしれませんが、何卒ご教授いただければと存じます。
よろしくお願い申し上げます。

ASP.Net にて日々壁が立ち上がっております。

GridView のデータソースであるSQLDataSourceのSQL文を変更し、尚且つページング、ソーティングも行いたいと思うのですが、なかなかうまく行きません。

Dim SQL As String

条件が複雑なので、SQL には自作したSQL文が入っております。

Me.SqlDataSource.SelectCommand = SQL
Me.SqlDataSource.DataBind()

このように記述するとGridViewのデータはSQL文に指定した通りに表示されるのですが、ページング、ソーティングを行うと、元々SqlDataSourceに指定してあるS...続きを読む

Aベストアンサー

SQLDataSourceコントロールてのは、データソースコントロールの中で一番簡単なコントロールなので、凝ったデータアクセスには向いていません。
ページング取得など、全件取得した後でページング部分を抽出するロジックであり、ある程度のデータ量を超えると、トラフィックが巨大になって使えないと思います。

そのあたりも含め、データソースコントロールによるデータ処理については、以下の書籍を参考にされたらと思います。
.NET 2.0時代の書籍なので、最近はもっと進んでますが。。

Microsoft-Visual-Studio-2005によるWebアプリケーション構築技法
赤間信幸 著

http://www.amazon.co.jp/Microsoft-Visual-Studio-2005%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E6%A7%8B%E7%AF%89%E6%8A%80%E6%B3%95-%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88%E3%82%B3%E3%83%B3%E3%82%B5%E3%83%AB%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%83%86%E3%82%AF%E3%83%8B%E3%82%AB%E3%83%AB%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/product-reviews/4891005157/ref=sr_1_1_cm_cr_acr_txt?ie=UTF8&showViewpoints=1

で、今回望んでおられる、GridView + Paging / Sortingを解決するには、SQLDataSourceではなく、カスタムSQLに対応できるObjectDataSourceが正解だと思います。
また、GridViewのページャについても、自動処理ではなく、正しく部分抽出SQLをハンドリングできる設定が必要です。


このあたりのサンプルを学習してください。
http://www.codeproject.com/Articles/13963/Implement-Paging-using-ObjectDataSource-with-GridV
http://www.codeproject.com/Articles/42043/Optimized-Paging-and-Sorting-using-Object-Data-Sou
http://www.atmarkit.co.jp/fdotnet/bookpreview/vs2005webapp_10/vs2005webapp_10_01.html

SQLDataSourceコントロールてのは、データソースコントロールの中で一番簡単なコントロールなので、凝ったデータアクセスには向いていません。
ページング取得など、全件取得した後でページング部分を抽出するロジックであり、ある程度のデータ量を超えると、トラフィックが巨大になって使えないと思います。

そのあたりも含め、データソースコントロールによるデータ処理については、以下の書籍を参考にされたらと思います。
.NET 2.0時代の書籍なので、最近はもっと進んでますが。。

Microsoft-Visual-Studio-...続きを読む

QSqlDataSource SelectCommand の書き方

はじめまして。
現在aspx側でDBから読み込んだデータをGridViewに表示するプログラムを作っています。

環境
SQL Server 2005 Express Edition
Visual Studio 2005
ASP.NET(VB)

初期表示として前の画面で選ばれた種別によってSQLが変わるので .aspxで

<%
dim s as string = "SELECT * FROM 台帳 "
select case session("kind")
case "A"
s &= "WHERE 種別 LIKE '商品A%' "
case "B"
s &= "WHERE 種別 LIKE '商品B%'"
case else
' 全種別を取得
end select
hyo_1.SelectCommand = s & "ORDER BY 種別"
%>
<asp:SqlDataSource ID="hyo_01" runat="server" ConnectionString="<%$ ConnectionStrings:ConStr %>" />
と記述してみたのですが、結果は、何も表示されませんでした。
(順序を逆にしてみてもダメでした)

この場合、<asp:SqlDataSource ~ /> で SelectCommand はクリアされてしまうのでしょうか?
<asp:SqlDataSource ~ の中で SelectCommand="SELECT ~ " としたときに変数に入れたWHERE句を途中に埋め込むことがどうやってもできなかったので苦し紛れにやってみたのですが、、、

変数 whr="'商品A%'"として <asp:SqlDataSource ~ の中で
SelectCommand="SELECT * FROM 台帳 WHERE 種別 LIKE <% = whr %> ORDER BY 種別" />
とするとエラーになってしまうし、いろいろ検索してみたのですが解決できませんでした。

SelectCommand の内容を場合によって変更するにはどのようにしたらよいのでしょうか?

よろしくお願いいたします。

はじめまして。
現在aspx側でDBから読み込んだデータをGridViewに表示するプログラムを作っています。

環境
SQL Server 2005 Express Edition
Visual Studio 2005
ASP.NET(VB)

初期表示として前の画面で選ばれた種別によってSQLが変わるので .aspxで

<%
dim s as string = "SELECT * FROM 台帳 "
select case session("kind")
case "A"
s &= "WHERE 種別 LIKE '商品A%' "
case "B"
s &= "WHERE 種別 LIKE '商品B%'"
case else
...続きを読む

Aベストアンサー

SqlDataSourceのSelectCommandプロパティに設定されるSQLにパラメータを追加して使用すればいいようですよ

SqlDataSourceのデータソース構成ウィザードでクエリビルダを使って
SELECT * FROM 台帳 WHERE 種別 LIKE @myShouhin
などとパラメータつきのSQLに変更します
こうして『次へ』をクリックするとパラメータの定義に移ると思います
名前:myShouhin
値: %
にしてウィザードを完了させます

選択を変更したいイベントで
SqlDataSource.SelectParameter(0).DefaultValue = "商品A%"
GetdView1.dataBind()
などを実行してみてください

Qポストバック時のDatasourceバインド処理について

いつもお世話になっております。
VS2005 FrameWork2.0にて
ASPポストバックのDatasourceの挙動について質問させて下さい。

使用コントロールはDatasourceプロパティを持っていればなんでもいいのですが、例えばデザイナで、

DropDownList.DatasourceIdに SqlDatasourceを指定し、
SqlDatasourceのSelectQueryに" Select * from Table1 "
なんて指定しておけば、いくらポストバックが発生しても
常にDropDownList.DatasourceがNullでない状態で
、なおかつSQLサーバーをプロファイルしていても
Select文の発行は初回の1回だけでした。

でも、
手動で
DropDownList.DataSource = GetDataSource1()
DropDownList.DataBind()

※GetDataSource1()は、データベースをOpenしてDataTableを返すメソッド

みたいにコード上でバインドしておくと、
次のポストバック時にDataSourceがNULLになっています。

毎ポストバック時にDataBind()を書くと、
毎回Open~Select処理が走ってしまい嬉しくありません。

手動バインドさせる場合のスタンダードな書き方ってあるのでしょうか?

こういったことがナンセンスで、
本来は
[DataObjectMethod(DataObjectMethodType.Select)]属性をつけたメソッドを用意してObjectDatasourceのSelectメソッド等でやるのがスタンダードなんだよ
といったご指摘もあれば全てお聞きしたいと思っております。

よろしくお願い致します。

いつもお世話になっております。
VS2005 FrameWork2.0にて
ASPポストバックのDatasourceの挙動について質問させて下さい。

使用コントロールはDatasourceプロパティを持っていればなんでもいいのですが、例えばデザイナで、

DropDownList.DatasourceIdに SqlDatasourceを指定し、
SqlDatasourceのSelectQueryに" Select * from Table1 "
なんて指定しておけば、いくらポストバックが発生しても
常にDropDownList.DatasourceがNullでない状態で
、なおかつSQLサーバーをプロファイルしていても
Select...続きを読む

Aベストアンサー

いくつかの条件がからんでいますが、一般的にということで。。

ポストバック時、BindControlのDataSourceプロパティはnullになっていますが、通常、ViewStateをonにしていれば、BindControl自身の値(RepeaterであればItemTemplate生成のテキストボックスなど)がViewStateにドカンと保持されて、自動的に再表示されますので、再度DataBindする必要はないと思います。

自分は、ASP.NET 2.0 Web Formであれば、
初回時:データソースから読込み、DataBind実行
ポストバック時:追加・削除・更新の場合のみ、DB操作を行ってから読込み、DataBind実行
といった感じで統一しています。

ただ、毎回DBから読み込む方式と、ViewStateに値を埋めておいて送信する方法の比較ですが、DBドライバ側のキャッシュ機能などを考えれば、デカいViewStateより再SELECTのほうが早いような感じがします。

また、新しいASP.NET MVCではもはやViewStateもPostBackも使っていません(やっぱり)。
SQL DataSourceもObject DataSourceもキレイサッパリなくなって、「LINQかEntity Frameworkを使え」ということのようです。

いくつかの条件がからんでいますが、一般的にということで。。

ポストバック時、BindControlのDataSourceプロパティはnullになっていますが、通常、ViewStateをonにしていれば、BindControl自身の値(RepeaterであればItemTemplate生成のテキストボックスなど)がViewStateにドカンと保持されて、自動的に再表示されますので、再度DataBindする必要はないと思います。

自分は、ASP.NET 2.0 Web Formであれば、
初回時:データソースから読込み、DataBind実行
ポストバック時:追加・削除・更新の場合のみ...続きを読む

Q[ASP.NET]DropDownListのDB連携のやり方。

こんにちわ。
VS.NET2003で、ASP.NET+C#で開発しております。
ちょっと悩んでしまったので、質問させてください。

とある入力フォームを作成しようと思っているのですが、そのフォームにDBと連携したDropDownListを複数配置させたいと考えております。
で、とりあえず1つ連携させてみたのですが、これを複数やるのってなんだかなぁ。っと思ってしまいました。

連携の方法としては、
(1)sqlDataAdapterを作成、クエリを作る。
(2)sqlDataAdapterからdataSetオブジェクトを作成する。
(3)Page_LoadメソッドにてsqlDataAdapter.Fill(dataSetオブジェクト)を実行し、DataBindする

なんですが、これDropDownListの数だけsqlDataAdapter作らなくちゃいけないんですかねぇ?途中で端折れるところや、使いまわし出来る部分がありましたら、どなたか教えてください。

よろしくお願いします。

Aベストアンサー

VS.NETでVisualにやる方法でやる方法がありますが、
これは初心者向けです。
コードを自分で書いた方が効率がよい。

例えば、データテーブルの読み込みメソッドを共通クラスに置く。

public DataTable ReadDataTable(string strSQL)
{
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = new OleDbCommand(strSQL, 接続);
da.Fill(dt);
return dt;
}

Page_Loadでは

DropDownList1.DataSorce = 共通クラス.ReadDataTable("select * from TableHoge");
DropDownList1.DataBind();

QC#にてDropDownListの値を動的に設定する

C#にてDropDownListの値を動的に設定したいのですが、要約すると以下の感じです。
DBより読込んだ値が「A」の場合
Items Text   Value
0 あああ  アアア
1   いいい  イイイ

DBより読込んだ値が「B」の場合
Items Text   Value
0 かかか  カカカ
1   ききき  キキキ
2   くくく  ククク

としたいのですが、どのように設定してよいか初心者のため、
分かりません。恐れ入りますが、有識者の方、ご教示下さい。

Aベストアンサー

DorpDownListに設定するデータはどこにあるのでしょう
DataSetやDataSourceにあるのか まったく関係ない配列にあるデータなのか

DBから来たデータというのはいつ取得されるものなのか ・・・

TextやValueに設定するデータがDB側にあるなら
仕様を満たす SQLを構築してDataSourceオブジェクトを作成し
DropDownListのDataSourceIDやDispaleyTextFieldおよびDataValueFieldを適切な設定をすればいいように思います

Q【ASP.net】SqlDataSourceについて

【ASP.net】SqlDataSourceについて

index.aspxページにSqlDataSource1とGridView1と検索ボタンをセットし、
検索ボタンが押されると、SqlDataSource1にセットしているSQLにWHERE文を
追記して、GridView1を再表示させたいのですが、どのようにすれば良いのでしょうか?
現在のソースです・・・。
Dim Str As String = SqlDataSource1.SelectCommand
Dim StrSql As String = ""

StrSql = " WHERE lbl = ららら "
Str = Str & StrSql

SqlDataSource1.SelectCommand = Str
GridView1.DataSource = SqlDataSource1.SelectCommand
GridView1.DataBind()
この状態だと、SQL文がBindされてしまい、DBから値がとれません。
解る方いらっしゃいましたらご教授お願いします。

【ASP.net】SqlDataSourceについて

index.aspxページにSqlDataSource1とGridView1と検索ボタンをセットし、
検索ボタンが押されると、SqlDataSource1にセットしているSQLにWHERE文を
追記して、GridView1を再表示させたいのですが、どのようにすれば良いのでしょうか?
現在のソースです・・・。
Dim Str As String = SqlDataSource1.SelectCommand
Dim StrSql As String = ""

StrSql = " WHERE lbl = ららら "
Str = Str & StrSql

SqlDataSource1.SelectCommand = St...続きを読む

Aベストアンサー

>GridView1.DataSource = SqlDataSource1.SelectCommand
これが問題
通常、静的にデータソースは設定されているので必要ありません。
設計時に、GridViewのデータソースは定義してあると思います。

もし、動的にやるなら、コントロール本体を設定する処です。
GridView1.DataSource = SqlDataSource1

Qvb.netで画面のコントロールId名を変数で動的に制御し処理する方法

以下のような処理がしたいです。
実現方法をご存知でしたらご教授下さい。

画面のコントロールText1~Text3があります。
For~Nextでこのコントロールに値をセットしたいです。

For i = 1 To 3
  Texti.Text = i
  ※このiのTextの後ろのiの部分を1~3と動的に変更し、各Textに値を設定したいです。
Next

Aベストアンサー

こんにちは、webでは、findcontrolを使うみたいです。

いかに、参考URLから、引用すると
***********************************
Dim L, U, i As Integer
Dim tx As System.Web.UI.WebControls.TextBox
L = LBound(dat)
U = UBound(dat)
For i = L To U
'コントロール名を探し出す
tx = FindControl("TextBox" & CStr(i))
'見つかったコントロールのTextプロパティに代入
tx.Text = dat(i)
Next

******************引用終わり*******
このようにすると良いみたいです。
asp findcontrolで、検索すると、
結構ヒットするみたいです。

参考URL:http://natchan-develop.seesaa.net/

Q  これの意味教えて下さい。

これの意味教えて下さい。
タグの
<tr>
<td></td>
</tr>
中に入っている
意味はなんですか?

Aベストアンサー

空白(半角スペース)として使用されることが多いですが、
を使用すると改行されません。

たとえばOK WaveのOKが行末あたりに来たときに、
(1)OKとWaveの間を半角スペースとする場合
~~~OK<改行>
Wave~~~

となりますが、
(2)OKとWaveの間をとする場合
~~~<改行>
OK Wave~~~

となります。

QGridViewにバインドせずにデータを表示する方法

環境:VS2008&VB.NET&ASP
GridViewに手動でテーブルからデータを読みデータバインドせず
DBの値を表示する方法を考えていますがうまくいかず困っています。
(データバインドしたくない理由はデータバインドを行っていると行の挿入や移動ができない認識のためです。)
初心者のため見当違いなことをしているかもしれませんが
それも含めまして質問させていただきます。

質問1
そもそもGridViewでデータバインドせずに手動でデータを表示することは可能でしょうか。

質問2
以下のコードで試しましたが「GridView1.Controls(0).Controls.Add(row1)」でExeptionが発生してしまいました。
手順に不適格な箇所があるのでしょうか。

strSql = "SELECT * FROM Data_Table"
Using connection As New SqlClient.SqlConnection(cnStr)
Dim command As New SqlClient.SqlCommand(strSql, connection)
connection.Open()
Dim dr As SqlClient.SqlDataReader = command.ExecuteReader
While (dr.Read = True)
'データあり
str1 = dr("data1")
str2 = dr("data2")
str3 = dr("data3")
End If
connection.Close()
Dim item1 As DataGridItem
item1 = New DataGridItem(-1, -1, ListItemType.Item)
Dim cell0 As TableCell = New TableCell
item1.Cells.Add(cell0)
Dim cell1 As TableCell = New TableCell
item1.Cells.Add(cell1)
Dim cell2 As TableCell = New TableCell
item1.Cells.Add(cell2)
Dim row1 As New GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal)
row1.Cells.Add(cell0)
row1.Cells.Add(cell1)
row1.Cells.Add(cell2)
GridView1.Controls(0).Controls.Add(row1)
End While
End Using

エラーの内容
System.ArgumentOutOfRangeException はユーザー コードによってハンドルされませんでした。
Message="指定された引数は、有効な値の範囲内にありません。 パラメータ名: index"

お力添えをよろしくお願い致します。

環境:VS2008&VB.NET&ASP
GridViewに手動でテーブルからデータを読みデータバインドせず
DBの値を表示する方法を考えていますがうまくいかず困っています。
(データバインドしたくない理由はデータバインドを行っていると行の挿入や移動ができない認識のためです。)
初心者のため見当違いなことをしているかもしれませんが
それも含めまして質問させていただきます。

質問1
そもそもGridViewでデータバインドせずに手動でデータを表示することは可能でしょうか。

質問2
以下のコードで試しまし...続きを読む

Aベストアンサー

GridViewのRowsコレクションに Addメソッド無いため
コードでGridViewの行の追加が不可能なように思います

DromDownListのItemsなどなら Addメソッドもあるので
バインドしないでも項目の追加が可能だと思われます

SQLServerなら SQLDataSource経由でバインドした方が扱いやすいかもしれませんよ
DataSource経由なら DataSetやDataAdapterなどもウィザードで生成されますし
Tableについても型指定されたDataTableの派生クラスが生成されます

VBに付属のMSDNなどで GridViewのページの中のリンクを参照してみてください

QGridViewで複数のDropDownListを連携表示しようとして

GridViewで複数のDropDownListを連携表示しようとしています。

操作全般はソースコード(*.aspx.cs)から行い、動的な処理を行えるようにしたいのですが、
DropDownList同士のバインドのやり方が分からなくて、困っています。

具体的には、ListAのデータ一覧から、ListBのデータ一覧を表示するといった処理になります。
また、GridView上でのDropDownListの描画は、ライブラリにメソッドを組み込み、そこから呼び出しています。

ライブラリの宣言文は以下の通りです。

/// <summary>
/// 子コントロールとテンプレートが属する Control オブジェクトを定義します。
/// </summary>
/// <param name="container"></param>
public void InstantiateIn(System.Web.UI.Control container)
{
System.Web.UI.WebControls.DropDownList wddlFrame = new System.Web.UI.WebControls.DropDownList();

wddlFrame.AutoPostBack = false;
wddlFrame.CausesValidation = false;
wddlFrame.ID = _IDname;
wddlFrame.EnableViewState = true;
wddlFrame.DataBinding += new EventHandler(wddlFrame_DataBinding);
wddlFrame.Style.Add("width", this._listWidth.ToString() + "px");

container.Controls.Add(wddlFrame);
}

/// <summary>
/// コントロールがデータソースに連結すると発生します。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void wddlFrame_DataBinding(object sender, EventArgs e)
{
System.Web.UI.WebControls.DropDownList wddlFrame = (System.Web.UI.WebControls.DropDownList)sender;
GridViewRow container = (GridViewRow)wddlFrame.NamingContainer;
if (this._listItems != null)
{
wddlFrame.Items.AddRange(this._listItems);
}
}

ASPを弄るのは初めてで、また既存のデータをカスタマイズしているだけの為、
知らずに使っている部分も多くあり、完全に手詰まり状態となっています。

分かる方がおられましたらご教授お願いします。
上記ソースから察せられるかと思いますが、使用している言語はC#になります。

GridViewで複数のDropDownListを連携表示しようとしています。

操作全般はソースコード(*.aspx.cs)から行い、動的な処理を行えるようにしたいのですが、
DropDownList同士のバインドのやり方が分からなくて、困っています。

具体的には、ListAのデータ一覧から、ListBのデータ一覧を表示するといった処理になります。
また、GridView上でのDropDownListの描画は、ライブラリにメソッドを組み込み、そこから呼び出しています。

ライブラリの宣言文は以下の通りです。

/// <summary>
/// 子コ...続きを読む

Aベストアンサー

#2の続きです。

サンプル(test2.aspx.cs)



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Repeater_test2 : System.Web.UI.Page
{

 public Dictionary<string, string>        employees;
 public Dictionary<string, string>        prefs;
 public Dictionary<string, Dictionary<string, string>> cities; // 市町村

 protected void Page_Load(object sender, EventArgs e) {

  this.emploee = new List<string> {"あいうえお","かきくけこ"};

  this.prefs = new Dictionary<string,string> {
   {"富山県", "a16"},
   {"石川県", "a17"}
  };

  this.cities= new Dictionary<string, Dictionary<string, string>> {
   {"a16", new Dictionary<string, string>{ {"富山市", "a161"},{"高岡市","a162"},{"射水市","a163"}} },
   {"a17", new Dictionary<string, string>{ {"金沢市", "a171"},{"小松市","a172"},{"白山市","a173"}} }
  };

  if (!Page.IsPostBack) {
   rep_emploee.DataSource = this.emploees;
   rep_emploee.DataBind();
  }

 }

 protected void emploee_Databound(object sender, RepeaterItemEventArgs e) {
  var repitem  = e.Item as RepeaterItem;
  var ddlpref  = repitem.FindControl("ddl_pref") as DropDownList;
  ddlpref.DataSource  = this.prefs;
  ddlpref.DataTextField = "Key";
  ddlpref.DataValueField = "Value";
  ddlpref.DataBind();
 }

 protected void pref_Changed(object sender, EventArgs e) {
  var ddl_pref = sender as DropDownList; // (値が変更された)prefドロップダウン
  var val_pref = ddl_pref.SelectedValue; // その値
  var repitem  = ddl_pref.Parent as RepeaterItem; // 行アイテム全体
  var ddl_city = repitem.FindControl("ddl_city") as DropDownList; // cityドロプダウン

  var dic_cities = this.cities[val_pref]; // Bindされるべき市町村群
  ddl_city.DataSource = dic_cities;
  ddl_city.DataTextField = "Key";
  ddl_city.DataValueField = "Value";
  ddl_city.DataBind();
 }

}

#2の続きです。

サンプル(test2.aspx.cs)



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Repeater_test2 : System.Web.UI.Page
{

 public Dictionary<string, string>        employees;
 public Dictionary<string, string>        prefs;
 public Dictionary<string, Dictionary<string, string>> cities; // 市町村

 protected void Page_Load(object s...続きを読む


人気Q&Aランキング