DOBON.NET DOBON.NETプログラミング掲示板過去ログ

GridViewのボタンを押下された行の番号を取得するには?

環境/言語:[環境(WindowsXP Pro)、使用言語(VB.NET2005)、.NET Frameworkのバージョン(2.0)]
分類:[ASP.NET]

お世話になります。
ASP.netの2.0で作成しています。

DBから取得したデータをGridViewコントロールで表示しています。
GridViewコントロールに[参照]ボタンを設置しています。
この[参照]ボタンをクリックしたらGridViewの行の値を取得したいと思っていますが
どのようにしたらいいのでしょうか?

編集モードのGridView.EditIndexみたいに取得できますでしょうか?
GridViewのボタンを押下された行の番号を取得する事は可能でしょうか?

色々と質問してすみませんが宜しくお願いします。
では、失礼します。
RowCommandイベントで、e.CommandArgumentが行のインデックスになります。
回答、ありがとうございます。

> RowCommandイベントで、e.CommandArgumentが行のインデックスになります。

下記のようにRowCommandイベントで記述してみましたがエラーメッセージが
表示されてみました。

[エラーメッセージ]
入力文字列の形式が正しくありません。

[ソース]
Dim strData As String = ""
strData = CType(GridView1.Rows(e.CommandArgument).FindControl("Label1"), Label).Text

GridViewのCommandArgumentで設定するんでしょうか?
CommandArgumentにどのように設定すればいいのでしょうか?

お手数をおかけしますが再度、宜しくお願いします。
では、失礼します。
お世話になります。

下記のURLを参考にしてGridViewのRowCreatedイベント時にImageButtonの
CommandArgumentに行番号を設定する事ができました。

http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview.rowcommand.aspx

でもGridViewのRowCommandでe.CommandArgumentの値を参照したところ、空文字
("")が設定されていました。

それでエラーが発生してしまいました。
何か進展がありましたら書き込みますので宜しくお願いします。
では、失礼します。
私も知らなかったのですが、試してみると、
asp:ButtonFieldにはe.CommandArgumentに行番号が設定されていますが、
テンプレート列のasp:Buttonのそれは空白ですね。
混乱させてごめんなさい。
回答、ありがとうございます。

> 私も知らなかったのですが、試してみると、
> asp:ButtonFieldにはe.CommandArgumentに行番号が設定されていますが、
> テンプレート列のasp:Buttonのそれは空白ですね。
> 混乱させてごめんなさい。

という事はこのやり方ではGridViewの行番号は取得できないのでしょうか?
CommandArgumentに値を設定しておいて、後でそれを取り出すのが正統な方法です。ただ、asp:ButtonFieldの場合には、デフォで行番号が格納されているようです。
回答、ありがとうございます。

> ただ、asp:ButtonFieldの場合には、デフォで行番号が格納されているようです。

説明不足でした。GridViewのセルはButtonFieldではなくTemplateFieldで作成
しています。

何か違う方法を探してみます。
アドバイスしていただきありがとうございました。
また、わからない事がありましたらアドバイス宜しくお願いします。

では、失礼します。
すみません、解決済みのチェックを付けるの忘れました。
では、失礼します。
解決済み!
2006/08/31(Thu) 13:02:33 編集(投稿者)

TemplateFieldなら、以下のようにすれば行番号を取れます。

Protected Sub GridView1_RowCommand(ByVal sender As Object,
               ByVal e As GridViewCommandEventArgs) 
 System.Diagnostics.Debug.WriteLine(e.CommandArgument) 
End Sub 

Protected Sub GridView1_RowCreated(ByVal sender As Object,
                 ByVal e As GridViewRowEventArgs) 
 If e.Row.RowType = DataControlRowType.DataRow Then 
   Dim btn As Button = CType(e.Row.FindControl("Button1"), Button) 
   btn.CommandArgument = e.Row.RowIndex.ToString 
 End If 
End Sub
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板