記事一覧

ListViewの行インデックスを取得する方法 | asp.net


今回は asp.net にて ListView の現在編集している行のインデックスを取得する方法をご紹介いたします。
aspx側で取得する方法はよく紹介されていますが、VB(C#)側での取得方法を調べるのには少し苦労しました。


前提条件
Windows 7 Professional 以降 / Windows Server 2008 R2 以降
Visual Studio 2008 Professional 以降
VB.NET
.Net Framework 3.5 以降


1.aspxファイルに記述する方法

aspx側では以下のように記述することもできますが、コードビハインド部分で取得することはできません。
<ItemTemplate>
<asp:Label ID="lblIndex" Text='<%# Container.DisplayIndex + 1 %>' runat="server" />
</ItemTemplate>


2.aspx.vbファイルに記述する方法

以下のようにテキストボックスオブジェクトを取得し、その Parent にて ListViewDataItem が取得することができます。そのDisplayIndexにて表示行インデックスが取得することができます。ListViewの中の記述されかたにもよりますが、基本的には1~2階層上の親がListViewDataItemとなっていることが多いと思いますので、固定で textBox.Parent.Parent などと記述しても良いかもしれませんが、あくまでPG修正や仕様変更などを見越して記述しています。

'''<summary>
'''ListViewのコントロールオブジェクトから現在編集している行のインデックスを取得する
'''</summary>
'''<param name="sender">コントロール</param>
'''<returns>行インデックス</returns>
'''<remarks></remarks>
Private Function GetSelectedIndex(ByVal sender As Object) As Integer
Dim index As Integer = 0
Dim textBox As TextBox = DirectCast(sender, TextBox)
Dim ctrl As System.Web.UI.Control = textBox.Parent
'親のコントロールが見つかるまでループする
For i As Integer = 0 To 10
'ListViewDataItemが見つかった時点でループ終了
If TypeOf ctrl Is ListViewDataItem Then
Exit For
End If
ctrl = ctrl.Parent
Next i
Dim parentItem As ListViewDataItem = TryCast(ctrl, ListViewDataItem)
If Not parentItem Is Nothing Then
'表示インデックスを取得する
index = parentItem.DisplayIndex
End If
Return index
End Function

'使用方法
Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim index As Integer = Me.GetSelectedIndex(sender)
End Sub


3.Windows.Formsでの記述方法

ネットに散乱している情報を精査するためにも、念のためお伝えします。
System.Windows.Forms の ListView では SelectedItems(0).Index と記述するとインデックスが取得できますが、asp.net ではそのようなメソッドはありませんので、使用できません。


関連記事

コメント

コメントの投稿
非公開コメント

アルバム

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語・データベース】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
Oracle10g SQLServer2008R2 SQLAnywhere8/11/16
ActiveReport CrystalReport ReportNet(IBM)
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。