- PR -

DataGridの行選択方法について

投稿者投稿内容
ぬるぴょん
ベテラン
会議室デビュー日: 2003/06/02
投稿数: 62
投稿日時: 2003-06-02 21:52
会議室の皆さんはじめまして。

ASP.NET+VB.NETで開発しています。

DataGridについてですが、行を選択する際にプロパティビルダによる
「選択」ボタンをクリックする方法でなくて、行の任意の場所をクリックして
選択状態にすることが出来るでしょうか。
ちょうどListViewの詳細表示のようなイメージです。

どなたかよろしくお願いします。
未記入
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 68
投稿日時: 2003-06-03 13:27
手抜きアイデアですが、
DataGridのすべての列をButtonColumnのリンクボタンにして、
スタイルを工夫すれば、似たような感じになるかな、と。
ぬるぴょん
ベテラン
会議室デビュー日: 2003/06/02
投稿数: 62
投稿日時: 2003-06-04 16:05
仕様書無しさんありがとうございます。

ちょっと挑戦してみます。

やっぱりスンナリは厳しいですか・・・
GUNNM
常連さん
会議室デビュー日: 2002/01/23
投稿数: 30
お住まい・勤務地: 横浜
投稿日時: 2003-06-05 00:31
昔、こんな感じでできたような気がします。
DataGridの一番左に選択列を作って、その行を不可視に設定し、
以下のコードをPreRenderかなにかに書いてあげると、DataGridItemがクリックされたときに、選択ボタンがクリックされたことになった気がします。なにぶん1年くらい前の話なので微妙です。間違ってたらごめんなさい。

foreach( DataGridItem dgi in dgUserList.Items )
{
strScript = Page.GetPostBackEventReference( dgi.Cells[0].Controls[0], dgi.ItemIndex.ToString() );
dgi.Attributes.Add( "onClick", strScript);
}
ぬるぴょん
ベテラン
会議室デビュー日: 2003/06/02
投稿数: 62
投稿日時: 2003-06-05 20:16
GUNNMさん、ありがとうございます。

当方VBなので以下のコードで出来ました。

Private Sub DGList_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles DGList.PreRender

Dim dgi As DataGridItem
Dim strScript As String

For Each dgi In DGList.Items
strScript = GetPostBackEventReference(dgi.Cells(0).Controls(0), dgi.ItemIndex.ToString())
dgi.Attributes.Add("onClick", strScript)
Next

End Sub


ただ、下の方を選択しても再表示時に一番上から表示されてしまいますが
こればっかりは仕方ないと思っています。

ありがとうございました。
ぬるぴょん
ベテラン
会議室デビュー日: 2003/06/02
投稿数: 62
投稿日時: 2003-06-05 20:27
自己レスです。

> ただ、下の方を選択しても再表示時に一番上から表示されてしまいますが
> こればっかりは仕方ないと思っています。

SmartNavigation="True"で解決しました。
ぬるぴょん
ベテラン
会議室デビュー日: 2003/06/02
投稿数: 62
投稿日時: 2003-06-05 22:26
何度もすいません。
今度はクリック時選択行の ある列の値を取得できなくて困っています。

取得したい列は2列目でテンプレート上のラベル(ID:LblCode)にバインドしてあります。

Private Sub DGList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DGList.SelectedIndexChanged

Label1.Text = DGList.SelectedItem.ItemIndex
Label2.Text = DGList.Items(DGList.SelectedItem.ItemIndex).Cells(1).Text

End Sub

上記コードでlabel1には選択した行のindexが取得できているのですが
Label2に肝心の値が取得できません。

どなたかよろしくお願いします。
未記入
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 68
投稿日時: 2003-06-06 09:36
最後が
Cells(1).Controls(0).Text

とかで、どうでしょう?

数が多い場合はDataGridのデータソースから
データを引っ張ってきたほうが、すっきりすると思います。

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