■No24438に返信(satsukiさんの記事) > Dim value1 As Point = datagridview1.CurrentCellAddress > として、値を確認してみましたら、x=-1 y=-1 となっております。 という事は、現在はアクティブなセルが無い状態ということですね。
Private Sub DataGridView1_RowEnter(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.RowEnter Label1.Text = CStr(e.RowIndex) End Sub
> 「現在位置の行番号」を取得したいのであれば、この値を更新するタイミングは、 > 別の行に移動した時、すなわち RowEnter イベントなどが適切かと思います。 > > また、RowEnter イベントを使うのであれば、移動後の行番号は、イベント引数から > 得る事ができます。すなわち、このような形です。 > > Private Sub DataGridView1_RowEnter(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.RowEnter > Label1.Text = CStr(e.RowIndex) > End Sub この方法は簡単そうでよいですね。 Public Sub Initialize○○○()は、フォームがオープンされるときのプロシージャで、行選択したときの行番号の値取得は、別で行っています。 全く開いただけの状態での行番号の取得(つまり1行目)ができればよいのです。
ですから、 Dim rows As DataGridViewSelectedRowCollection rows = DataGridView1.SelectedRows If rows.Count > 0 Then Label1.Text = CStr(rows(0).Index + 1) Else '選択されていない時の表現 Label1.Text = "行が選択されていません。" End If のように、何らかの判定が必要になるということです。
'★コントロールを何も貼っていない、空のフォーム上で実行してみてください★ Public Class Form1 Private WithEvents label1 As Label Private WithEvents table As DataTable Private WithEvents dgv1, dgv2, dgv3 As DataGridView Private WithEvents tabControl1 As TabControl Private WithEvents tabPage1, tabPage2 As TabPage
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load CreateSampleControls() UpdatePositionLabel() End Sub
Private Sub dgv1_RowEnter(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) _ Handles dgv1.RowEnter, dgv2.RowEnter, dgv3.RowEnter UpdatePositionLabel() End Sub
'DataGridView が作成されているか? Me.Text = String.Format("{0}, {1}, {2}", dgv1.Created, dgv2.Created, dgv3.Created) End Sub
Private Sub CreateSampleControls() Me.SuspendLayout() label1 = New Label() label1.AutoSize = True label1.Location = New Point(280, 30) label1.Text = "Label1" Controls.Add(label1)
table = New DataTable() table.Columns.Add("Col1") table.Columns.Add("Col2") For r As Integer = 1 To 100 table.Rows.Add(String.Format("{0:00}-1", r), String.Format("{0:00}-2", r)) Next
tabControl1 = New TabControl() tabPage1 = New TabPage("Tab1") tabPage2 = New TabPage("Tab2") tabControl1.TabPages.AddRange(New TabPage() {tabPage1, tabPage2}) tabControl1.SetBounds(0, 200, 300, 200) Controls.Add(tabControl1)
分類:[.NET]
こんにちは、satsukiと申します。
あちこち調べましたが、わかりませんでしたので、どなたかご教示お願いいたします。
datagridviewのdatasourceにdatatableをセットして一覧表示をしています。
datagridviewの右下に現在位置の行番号と行の総数を/で区切って表示したいのですが、表示直後に1行目にカーソルがあたっているにも関わらず、currentrowやselectedrowの値を調べると0になっています。
画面表示直後に「1/500」などというように表示するにはどのようにしたらよいでしょうか?