投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/4/11 11:31:22
> 技術不足の為、項目ごとにデータをセルにボタンクリックで送信しています
参考にされたというページに、下記のコードが掲載されていましたが、これがデータバインドです。
DataGridView1 を直接操作するのではなく、DataTable を編集することでデータを操作できます。
Dim table As DataTable = New DataTable() 
table.Columns.Add("C1"GetType(String)) 
table.Columns.Add("C2"GetType(String)) 
table.Columns.Add("C3"GetType(String)) 

table.Rows.Add("aaa""あああ""123"
table.Rows.Add("bbb""いいい""456"
table.Rows.Add("ccc""ううう""789"
table.Rows.Add("ddd""えええ""012"
table.Rows.Add("eee""おおお""345"
table.Rows.Add("fff""かかか""678"

DataGridView1.DataSource = table

この方法の利点は、DataGridView の負荷が軽減されることや、
絞込み表示や並び替えが容易になる点です。
質問の本質からは外れますが、余力があれば併せて習得してみてください。


> 一部分の文字の色を変化させたい
> 場合は、どういった記述で変化させられるのでしょうか。

文字色の変更としては、難易度別に 3 パターンあります。

(1) 「セル単位で着色する」たとえば 2 行目の 0 列目を赤文字にする
(2) 「データ内容に応じて着色する」たとえば マイナスの数値の入っているセルを赤文字にする
(3) 「文字単位で着色する」たとえば "VB.NET" というデータの ".NET" 部分だけを赤文字にする


(1) のパターンの場合は、
DataGridView1(0, 2).Style.ForeColor = Color.Red
という感じです。比較的単純ですね。
必要に応じて、セル選択時の文字色や背景色も操作すると良いでしょう。
行単位や列単位での着色については後述。


(2) の場合は、こんな感じです。データ内容に応じて変化するので、セル値を手動編集した場合にも文字色を変化させられるのが利点です。
Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    Dim dec As Decimal
    If Decimal.TryParse(e.Value, dec) AndAlso dec < 0 Then
        e.CellStyle.ForeColor = Color.Red
    End If
End Sub



(3) の場合は、スタイル指定では適用できないので、CellPainting イベントを使って
自身で文字列をカスタム描画して対応することになります。
手間がかかる分、もっとも自由度が高いです。

[DataGridViewのセルを自分で描画する]
http://dobon.net/vb/dotnet/datagridview/ownerdrawcell.html

[文字を描く]
http://dobon.net/vb/dotnet/graphics/drawstring.html


なお、(1) や (2) では、セルスタイル(DataGridViewCellStyleクラス)という物を利用しています。
セルスタイルを指定する箇所は色々あり、それぞれ優先順位が異なります。



各スタイルは、フォント・文字色・背景色・書式・文字の折り返し・右寄せ指定等々の
指定がありますが、上図のように幾つかの階層が重ね合わさっています。各スタイルの指定は
上位の階層では未設定となっており、その場合は下位の階層のスタイルが適用されます。

イベント引数 DataGridViewCellFormattingEventArgs の CellStyle
 セル単位の最終的なスタイル指定。
 上記(2)のパターンのように、既定のスタイル設定で補えない場合に利用します。

DataGridView1.DefaultCellStyle
 すべてのセル(列ヘッダーや行ヘッダーも含む)を対象とした既定のスタイル。

DataGridView1.ColumnHeadersDefaultCellStyle
 列ヘッダー(TopLeftHeaderCell も含む)を対象とした既定のスタイル。
 ただし EnableHeadersVisualStyles = True の場合は無視されます。

DataGridView1.RowHeadersDefaultCellStyle
 行ヘッダー(TopLeftHeaderCell は含まない)を対象とした既定のスタイル。
 ただし EnableHeadersVisualStyles = True の場合は無視されます。

DataGridView1.RowsDefaultCellStyle
 ヘッダー部以外のすべてのセルを対象とした既定のスタイル。

DataGridView1.AlternatingRowsDefaultCellStyle
 奇数行のセル(ヘッダー部は含まない)を対象とした既定のスタイル。
 一行おきに背景色を変化させるようなケースで利用されます。

DataGridView1.Columns(r).DefaultCellStyle / .HasDefaultCellStyle / .InheritedStyle
 列単位(ヘッダー部は含まない)を対象とした既定のスタイル。
 DefaultCellStyle は 初期状態で Nothing ですが、DefaultCellStyle に
 アクセスした瞬間に新しいスタイルが割り当てられてしまうため、
 未設定かどうかを確認するためには、If ~.HasDefaultCellStyle Then で
 判断することになります。
 また、ReadOnly である InheritedStyle プロパティは、ここまでの階層の
 すべてのスタイルを重ね合わせた状態を返すようになっています。

DataGridView1.Rows(r).DefaultCellStyle / .HasDefaultCellStyle / .InheritedStyle
 行単位(ヘッダー部は含まない)を対象とした既定のスタイル。
 DefaultCellStyle / HasDefaultCellStyle / InheritedStyle の役割は
 上記の列単位スタイルの説明と同じです。

セル.Style / .HasStyle / .InheritedStyle
 セル単位での既定のスタイル指定。
 イベントで上書きされるケースを除けば、これが最終的に適用されるスタイルとなります。