LoginSignup
1
4

More than 3 years have passed since last update.

Spreadのように、DataGridViewを使用する場合のTips

Last updated at Posted at 2019-07-08

※随時追加予定です。

TL;DR

  • GrapeCity(ActiveX)のように列と行を指定して値を設定する場合のTips

(1)RowCountプロパティを変更すると、指定した値がどんどん下にずれていく

原因

新規行が有効だと、RowCountプロパティは新規行も含めた行数となる。
つまり実際に追加しているのは新規行であるため、行数を増やすと新規行が一番下に来る、という理屈になる

対応策

新規行を無効(AllowUserToAddRows = False)とすればよい。
ReadOnly = Falseなら、AllowUserToAddRows = Falseとセットで考えておくとよい。
GrapeCity(ActiveX)に合わせるなら、AllowUserToDeleteRows = Falseと設定してもよいだろう。

ソース

修正前

Form1.vb
    Private Sub Form_Load(sender As Object, e As EventArgs) Handles Me.Load
        DataGridView1.MultiSelect = False
        DataGridView1.ReadOnly = False
        DataGridView1.ColumnCount = 1
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        DataGridView1.RowCount += 1
        DataGridView1.Rows(DataGridView1.RowCount - 1).Cells(1 - 1).Value = $"No{DataGridView1.RowCount}"

修正後

Form1.vb
    Private Sub Form_Load(sender As Object, e As EventArgs) Handles Me.Load
        DataGridView1.AllowUserToAddRows = False
        DataGridView1.MultiSelect = False
        DataGridView1.ReadOnly = False
        DataGridView1.ColumnCount = 1
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        DataGridView1.RowCount += 1
        DataGridView1.Rows(DataGridView1.RowCount - 1).Cells(1 - 1).Value = $"No{DataGridView1.RowCount}"

(2)カスタム列の実装

.NET DataGridViewのカスタムセルを実装する場合の注意点
https://qiita.com/tfukumori/items/6e5876e19d126fdcb85b

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4