DataGridViewボタン列で行毎に表示、非表示にするには

解決


モモ  2007-01-25 19:51:12  No: 135001

VB.NET2005です。
DataGridViewのボタン列をデータに応じて表示、非表示の
コントロールを行うことは可能でしょうか。
---------------------
区分    ボタン列
1        表示(ボタンのTEXT=1)
2        非表示
---------------------
として
---------------------
行番号  区分    ボタン列(表示=○、非表示=−)
1       1        ○
2       2        −
3       2        −
4       1        ○
5       2        −
---------------------
となるようにしたいのです。
よろしくお願い致します。


KW00  2007-01-29 08:58:03  No: 135002

DataGridViewを使ったことはありませんが、たぶん
該当行の高さをゼロにすればいいのでは?


魔界の仮面弁士  2007-01-29 10:19:55  No: 135003

値を見ながら、CellPainting あたりで塗りつぶしてしまうとか。

-----
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  DataGridView1.AllowUserToAddRows = False
  DataGridView1.Columns.Clear()
  DataGridView1.Columns.AddRange(New DataGridViewTextBoxColumn(), New DataGridViewButtonColumn())

  DataGridView1.Rows.Add(1, 1)
  DataGridView1.Rows.Add(2, 2)
  DataGridView1.Rows.Add(2, 2)
  DataGridView1.Rows.Add(1, 1)
  DataGridView1.Rows.Add(2, 2)
End Sub

Private Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
  If e.ColumnIndex = 1 Then
    If CStr(e.Value) = "2" Then
      Dim selected As Boolean _
          = DataGridViewElementStates.Selected _
          = (e.State And DataGridViewElementStates.Selected)
      e.PaintBackground(e.CellBounds, selected)
      e.Handled = True
    End If
  End If
End Sub
=====

ベタな方法としては、値に対して個別にセルタイプを変更するとか。
-----
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
  Dim T As New DataGridViewTextBoxColumn()
  Dim B As New DataGridViewButtonColumn()
  T.HeaderText = "区分"
  B.HeaderText = "ボタン列"
  B.Text = "押"
  B.UseColumnTextForButtonValue = True

  DataGridView1.AllowUserToAddRows = False
  DataGridView1.Columns.Clear()
  DataGridView1.Columns.AddRange(T, B)

  DataGridView1.RowCount = 5
  DataGridView1(0, 0).Value = 1
  DataGridView1(0, 1).Value = 2
  DataGridView1(1, 1) = New DataGridViewTextBoxCell()
  DataGridView1(0, 2).Value = 2
  DataGridView1(1, 2) = New DataGridViewTextBoxCell()
  DataGridView1(0, 3).Value = 1
  DataGridView1(0, 4).Value = 2
  DataGridView1(1, 4) = New DataGridViewTextBoxCell()
End Sub
=====


モモ  2007-01-29 21:20:19  No: 135004

お返事ありがとうございました。
前者の方法でばっちりです。
あきらめていたので実現してとても嬉しいです。
本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加