- PR -

ASP.NET DATAGRID 動的なDropDownList?

投稿者投稿内容
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2004-03-28 07:30
いつもお世話になっております

DATAGRIDの更新時(EditItemTemplate内で)に
1つの列で、2種のDropDownList を出し分けたいのですが
−−列A=1 の時 列B に項目1をDropDownListにて選択
  列A=0 の時 列B に項目2をDropDownListにて選択
              列Bには項目1・2のどちらかのみ表示−−−※
 そもそも、※が更新時に実現できるのか想像さえつかないのですが・・・・

表示時は、単純に項目1・2をVisibleにて、表示仕分けしています。

すみません、お知恵を貸してください
よろしくお願い致します



ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-29 09:37
表示時はItemDataBoundイベントで表示を切り替えていると仮定しますが
ItemDataBoundイベント自体は編集行でも発生しますので編集行の場合の処理
をItemDataBoundイベント時に追加してあげれば実現できます。

コード:
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
	// 表示行の場合
	if( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
	{
		// 表示を切り替える処理
	}
	// 編集行の場合
		:
		:
}



大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2004-03-29 12:18
ゆうじゅんさん ありがとうございます

引用:

ゆうじゅんさんの書き込み (2004-03-29 09:37) より:
表示時はItemDataBoundイベントで表示を切り替えていると仮定しますが
ItemDataBoundイベント自体は編集行でも発生しますので編集行の場合の処理
をItemDataBoundイベント時に追加してあげれば実現できます。




表示時も、編集時も、おっしゃる通り、ItemDataBoundイベントに追加しました、が・・・・
ちなみに

コード:
    Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
        if e.Item.ItemType = ListItemType.EditItem then
                ''''''''''''''' 現預金区分から区分表示
                Dim txt_genyo As DropDownList = CCNT.GetControl(e.Item.Cells(4), GetType(DropDownList))
                Dim txt_ginko As DropDownList = CCNT.FndControl(e.Item.Cells(5), GetType(DropDownList), "ginko_list")
                Dim txt_suito As DropDownList = CCNT.FndControl(e.Item.Cells(5), GetType(DropDownList), "suito_list")

                If txt_genyo.SelectedIndex = 0 Then
                    txt_ginko.Visible = False
                Else
                    txt_suito.Visible = False
                End If
                ''''''''''''''' 削除時確認メッセージ
                Dim delBtn As Button = CCNT.GetControl(e.Item.Cells(1), GetType(Button))
                delBtn.Attributes.Add("onclick", "return confirm('削除しますか?');")
        end if
    end sub



表示時も、同じコードを記入してますが、表示時の場合は、正常に動作します
内容的には、現預金区分(txt_genyo)を、訂正したら、区分に合わせて、
入力項目(txt_ginko or txt_suito)を変えたいのですが
編集時には、現預金区分(txt_genyo)を変更しても、イベントが起きないから、実現してないと思うのですが
(削除時の確認メッセージの方はうまくいく) 
txt_genyo のイベントも、Attributes.Add してあげないといけないって事ですかね??

もし、Attributes.Add する必要がある場合、第2パラメータには
If txt_genyo.SelectedIndex = 0 Then
txt_ginko.Visible = False
Else
txt_suito.Visible = False
End If
を書き込まなくてはいけないのですが、このままで良いのでしょうか?

すみません よろしくお願い致します


ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-29 13:52
> txt_genyo のイベントも、Attributes.Add してあげないといけないって事ですかね??

JAVAスクリプトで処理するのであればAttributes.Addしないといけないですね

あとはtxt_genyoのAutoPostbackプロパティをtrueに設定してみたらどうでしょうか
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2004-03-29 14:47
度々 申し訳ないです

引用:

ゆうじゅんさんの書き込み (2004-03-29 13:52) より:
> txt_genyo のイベントも、Attributes.Add してあげないといけないって事ですかね??

JAVAスクリプトで処理するのであればAttributes.Addしないといけないですね

あとはtxt_genyoのAutoPostbackプロパティをtrueに設定してみたらどうでしょうか




AutoPostbackプロパティをtrueにしてみたのですが
Page_Load には戻るのですが、ItemDataBoundイベントには入ってくれません
Page_Load 以外のイベントには来ないようですが・・・・
Page_Load 内で、datagrid1 のテンプレート内の項目プロパティの変更が
できるのでしょうか・・・・

すみませんよろしくお願いいたします
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-29 16:56

Page_LoadでDataGridにデータバインドすればItemDataBoundイベント
が発生しませんか?
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2004-03-29 21:00
すみません ご面倒をお掛けします

引用:

ゆうじゅんさんの書き込み (2004-03-29 16:56) より:

Page_LoadでDataGridにデータバインドすればItemDataBoundイベント
が発生しませんか?



Page_LoadでDataGridにデータバインドすると、編集ボタンを押しても
Page_Load−−ItemDataBound
とイベントは発生しますが、e.Item.ItemTypeが ListItemType.Itemになり
表示画面が出てきます


すみません よろしくお願いします
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-30 16:21
こっちで試してみてないのでうまくいくかは保証できませんが
あとはPage_Load時にDataGridのItemsからItemsからItemTypeが編集行のものを
探して操作してみてはどうでしょうか

それでだめだったらJAVAスクリプトで処理したほうがいいかもしれません。
(JAVAスクリプトなら余計なPostが発生しないし)

コード:
// DropDownから指定されたTextのものを選択するJAVAスクリプト関数
function SelectDropDown(SelectText, DropDownList)
{
	for( i=0; i<DropDownList.length; i++ )
	{
		text = DropDownList.options[i].text;
		if( text == SelectText )
		{
			DropDownList.options[i].selected = true;
			break;
		}
	}
}


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