vb2008でのDefaultCellStyleの反映について

このQ&Aのポイント
  • vb2008でのDefaultCellStyleの設定が正しく反映されない現象について説明します。
  • DataGridViewの行の背景色を変更するために、DefaultCellStyleを設定しましたが、実際には背景色が変わりません。
  • RowsをColumnsに変えることで縦列の色は変わりますが、横列の色は変わりません。AlternatingRowsDefaultCellStyle.BackColorを利用すれば横列の色も変えることができます。
回答を見る
  • ベストアンサー

vb2008にてDefaultCellStyleが反映されない

よろしくお願いいたします。 vb2008を勉強しております。 DataGridViewにデータを表示し、 横列の背景色の変更を考えております。 For i As Integer = 0 To .RowCount - 1   .Rows(i).DefaultCellStyle.BackColor = Color.Red Next i と記述しておりますが、背景色が変わりません。 RowsをCulumsに変えれば縦列の色は変わります。 AlternatingRowsDefaultCellStyle.BackColorを利用すれば横列でも色が変わることは確認できました。 http://oshiete1.goo.ne.jp/qa4495913.html この方の質問を参考にLoad内に記述しております。 ちがう点は、 親フォームから子フォーム呼び出し、 子フォームのLoad内に記述しております。 <親Form> 子form.MdiParent = Me 子form.Show() <子Form> Loadイベント内にDataGridView.Rows(i).DefaultCellStyle.BackColor=~ としております。 いつ指定するかの問題と予想したのですが、アドバイスをお願いします。 お時間がありましたら、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • korin_
  • ベストアンサー率69% (46/66)
回答No.2

確かに、下記のコードを Form_Load に記述すると背景色が変更されないようですね。 この部分だけをコンストラクタ(Sub New)に記述することは出来ないのですか? <子フォーム(Form2)のLoad内> Using adapter As New SqlClient.SqlDataAdapter("SELECT * FROM tbl_TEST", My.Settings.dbConnectionString)   Dim myDataSet As New DataSet()   adapter.Fill(myDataSet)   DataGridView1.DataSource = myDataSet.Tables(0) End Using

tree_002
質問者

お礼

自分一人ではコンストラクタ内で実行することを思いつきませんでした。 korin_様、見て頂いた皆様、ありがとうございました。

tree_002
質問者

補足

korin_様ご回答ありがとうございます。 Sub New内にてDataGridViewを表示し、Load内にて背景色の変更を実行しましたところ、正しく表示できました。 実際にはDataGridViewの表示と背景色変更は同時に実行する為、 また、何度かDataGridViewの内容を更新する為、 dataGridViewLoad()でまとめてあります。 Private Sub dataGridViewLoad()   Using adapter As New SqlClient.SqlDataAdapter("SELECT * FROM tbl_TEST", My.Settings.dbConnectionString)     Dim myDataSet As New DataSet()     adapter.Fill(myDataSet)     DataGridView1.DataSource = myDataSet.Tables(0)   End Using   For i As Integer = 0 To DataGridView1.RowCount - 1     DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.blue   Next i End Sub これをNewとLoadで2回実行すると背景色が変更されました。 どちから1回ではだめでした。 こういった表示する為に2回実行する事は悪いことなのでしょうか?

その他の回答 (1)

  • korin_
  • ベストアンサー率69% (46/66)
回答No.1

こんにちは。 こちらの環境では、提示されているコードで正常に動作しました。 デバッグで確認して欲しいのですが、DataGiedView.RowCountは正しく表示されていますか? 予想ですが、DataGridView.Rows(i).DefaultCellStyle.BackColor=~の記述の後に DataGridView.DataSource を指定していませんか? その場合は DataSource を指定した後に BackColor を変更するようにしてください。 それでも解決しない場合は、問題の切り分けをするために現象が再現出来る最小限のコードを提示してもらえますか?

tree_002
質問者

補足

korin_様、ご回答ありがとうございます。 ご指摘頂きました件ですが、 DataGiedView.RowCountは正しく表示されます。 DataGiedView.(0, i).Valueでも中身は表示されます。 また、 DataGridView.DataSourceの後に、.BackColor指定を行っております。 SDIにすれば色は変わるのは確認できております。 <親フォームのLoad内> Me.IsMdiContainer = True Dim f2 As New Form2 f2.MdiParent = Me f2.Show() <子フォーム(Form2)のLoad内> Using adapter As New SqlClient.SqlDataAdapter("SELECT * FROM tbl_TEST", My.Settings.dbConnectionString)   Dim myDataSet As New DataSet()   adapter.Fill(myDataSet)   DataGridView1.DataSource = myDataSet.Tables(0) End Using For i As Integer = 0 To DataGridView1.RowCount - 1   DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.blue Next i とすると色が変更されません。 現状では、Form2上のボタン押下にて For i As Integer = 0 To DataGridView1.RowCount - 1   DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.blue Next i これを実行することで逃げております。 よろしくお願いいたします。

関連するQ&A

  • vb.netでDataGridViewの背景色の変更について

    初心者ですがよろしくお願いします。 現在DataGridViewにデータを表示できたのですが 背景色の変更ができません。 '編集したDataTableをDataGridViewにセットする DataGridView.DataSource = dt 'DataGridViewにユーザーが新しい行を追加できないようにする DataGridView.AllowUserToAddRows = False '行ヘッダーを非表示にする DataGridView.RowHeadersVisible = False 'DataGridViewの1番目の列を読み取り専用にする DataGridView.Columns(0).ReadOnly = True 'DataGridViewの2番目の列を読み取り専用にする DataGridView.Columns(1).ReadOnly = True 'DataGridViewの3番目以降の列のセルのテキストの配置を上下中央で右寄せする For dateIndex As Integer = 0 To monthList.Count - 1 DataGridView.Columns(2 + dateIndex).DefaultCellStyle.Alignment = _ DataGridViewContentAlignment.MiddleRight Next 'インデックス0の行のセルの背景色を薄い灰色にする DataGridView.Rows(0).DefaultCellStyle.BackColor = Color.LightGray と記述しております。 Rowsの部分をCulumsに変えると縦の色を変えることはできるのですが 何故かRowsだと横の色が変化しません 環境としましては Microsoft Visual Basic 2008 Express Edition VB.NET です ご教授、よろしくお願いします。

  • DataGridViewで指定列の背景色の変更

    いつもお世話になっております。 C#の開発環境で、「DataGridView」を使用しているのですが、指定した列の色を変更するプログラムを作成しています。 現在、フォーム上に配置したDataGridView「dgvTable」のセルの列の背景色を、 「更新」ボタン押して変更するプログラムを作成しています。 ソースは以下の通りです。 for( int i = 0; i < selectCols; i++) { dgvTable.Columns.Add("col",""); dgvTable.Columns[i].DefaultCellStyle.BackColor = Color.LightGreen; } このループで背景色を変更したつもりでしたが、反映されませんでした。 変更する列の数は変動するので、フォームのロードイベントで変更することができません。 どのようにコードを書けば、背景色が反映されるかをご教授願えないでしょうか? よろしくお願いします。

  • DataGridViewのヘッダー見出しのセンター寄せ

    VB.NET2005でDataGridViewを使用します。 各セルは書式設定できるのですが、ヘッダーは色設定などは出来ますが、 ヘッダー部のみテキストのセンターよせが出来ません。 どなたかお助けください。 'GRIDのとこのソース With Me.ComDataGridView1  .EnableHeadersVisualStyles = False  .RowCount = 100  .DefaultCellStyle.BackColor = 色  .RowsDefaultCellStyle.BackColor = 色  .AlternatingRowsDefaultCellStyle.BackColor = 色 End With

  • 子フォームから開いたフォームと親子関係を結びたい(VB2003)

    子フォームから開いたフォームと親子関係を結びたい(VB2003) VB.NET2003についての質問です。 formMain のクラスに以下のコードを書いて実行させると、form1がformMainの子フォームとして開きます 下記は、「form1」を「formMain」の子フォームとして開くコードです。 (formMainクラス内のコードです)   ------------------------------   Dim f As New form1   Me.IsMdiContainer=True   f.MdiParent=Me   f.Show   ------------------------------ form1には、form2を開くボタンが用意されています。 質問内容は、このform2を、formMainの子フォームとして開くにはどうすればよいか、ということです。 ためしに、form1クラスに以下のコードを書いて実行させたところ、 「formMainは型であるため、式として利用することができない」というエラーメッセージが出てしまいました。   ------------------------------   Dim f As New form2   f.MdiParent = formMain   f.Show()   ------------------------------ 以上、よろしくお願い致します。

  • DGV/子フォームで編集して親フォームへ

    親フォームと子フォーム、どちらにもDataGridViewを用意し、親フォームのセレクト行を子フォームに表示するというプログラムがあります。 さらに子フォームで直接DataGridViewに入力し編集して、更新ボタンを押して親フォームに反映させたいです。(関数を使いたい) ご教授お願いします(´;ω;`) Form1 private void DataGridView1_SelectedRowsDoubleClick(Object sender, MouseEventArgs e) { Form2 f2 = new Form2(); f2.setRowData(dataGridView1.SelectedRows); f2.Show(); } Form2 public void setRowData(DataGridViewSelectedRowCollection rows) { DataTable dt = createData(); foreach (DataGridViewRow r in rows) { string s1 = r.Cells[1].Value.ToString(); string s2 = r.Cells[2].Value.ToString(); string s3 = r.Cells[3].Value.ToString(); dt.Rows.Add("12345", s1, s2, s3); } dataGridViewDisp2(dt); } private void savebtn_Click(object sender, EventArgs e) { }

  • VB6.0で複数フォームのグラフ描写ができません

    VB6.0でForm1にある描画ボタンを押すと、Form2が表示され、Form2のピクチャーボックスにグラフが描かれるコードを作っているところです。 ところが、Form2にはグラフが描かれません。 以下の簡単なコード(ピクチャーボックス2の背景を白色にする)も実行されません。 Form1にピクチャーボックスを作り、描画ボタンを押すとそこにグラフが表示されるようにしたところ、グラフが描かれました。 フォームは2つ表示させると問題があるのでしょうか? なにか考えられる原因を教えていただけないでしょうか。 Form1に記述しているコード Dim GraphForm As New Form2 GraphForm.Show Form2.Picture2.BackColor = vbWhite

  • DataGridViewで右寄せ左寄せが反映されない

    新規フォームにDataGridViewを追加して、 Loadイベントに以下のコードを追記したのですが、 Alignmentの部分が正しく反映されません。 1行目は左寄せ、2行目は右寄せにしたいのですが 実際は1行目2行目ともに右寄せになります。 どのようにコーディングすれば個別に設定できるのでしょうか? Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim dt As New DataTable dt.Columns.Add("AccCode") dt.Columns.Add("AccName") dt.Rows.Add(dt.NewRow()) dt.Rows(0)("AccCode") = String.Empty dt.Rows(0)("AccName") = "てすとA" dt.Rows.Add(dt.NewRow()) dt.Rows(1)("AccCode") = String.Empty dt.Rows(1)("AccName") = "てすとB" Me.dgv.DataSource = dt ' コードのテキストを右寄せ dgv.Columns("AccName").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight dgv(0, 0).Style.Alignment = DataGridViewContentAlignment.MiddleLeft dgv(0, 1).Style.Alignment = DataGridViewContentAlignment.MiddleRight End Sub

  • DataGridView のSUB制御

    Windows 7 Professional に、Microsoft Visual Basic 2010 Express をインストールしました。 今までEXCELやAccessのフォームを使って作成していたVBAプログラムを移植しようと考えています。 その中で、いろいろ試しているうち、妙な現象に悩まされています。 例として、プロジェクト内にForm3を作成します。 そのForm3の中にDataGridView1を設置します。 Form3内のForm3_Load や、ボタンのプロシージャーに Me.DataGridView1.DataSource = ○○ や、 Me.DataGridView1(0, 0).Style.BackColor = Color.Orange 等を記述して実行すると、うまくデータソースを読み込んだり、指定のセルが塗られたりします。 ところが、 Module1 を作成し、そこに Public Sub test01 を作成して、 Form3.DataGridView1.DataSource = ○○ と記述し、call で test01を呼び出すと、全く表示されません。 Form3.DataGridView1(0, 0).Style.BackColor = Color.Orange などは、インデックスの範囲エラーと出てしまいました。 おかしいと思い、ブレークポイントを指定して、ステップ実行したところ call で呼び出されたtest01をステップしている最中に、 Debug.Print(Form3.DataGridView1.Columns.Count) を通過したところでは、カウント数がデータソースの行数になりますが、test01 のend sub まで実行して、form3のプロシージャーに戻ったところにも、Debug.Print(Me.DataGridView1.Columns.Count)を仕掛けて通過させたところ、イミディエイトウィンドウに表示された値は0でした。 つまり、呼び出したプロシージャー内では値をセットしたのに、戻った途端、それがすべて消えてしまった事になります。 VBAでこのような現象にぶつかった事がないので、ご質問ですが、Visual Basic 2010 では、sub の記述で、Form上のコントロールを制御する事はできないのでしょうか? Public Sub からFrom上の、特にDataGridViewを制御するのに、なにか必要な事があったら、教えてください。

  • VB2010の TextBox文字について の 質問

    VB2010の TextBox文字について の 質問 お尋ねします VB2010_Express版で プログラムを作っている者です Form1にTextBox1を貼付け、 そのTextBox内に 複数行に別けて 文字を記入します しかしDebug開始=run を すると、 TextBox内の文字列の背景が暗転し、 TextBoxのBackColorの色の上に 表示してくれません 念のために BackColorは薄黄色[MS 255 255 192 ]で、 ForeColorは 焦茶色の[Web Maroon]です runさせた後の 文字表記位置に 各文字ごとに 青色のBackColorが 現れ、 即ち、青色の枡目ごとに 焦茶色の 文字列が 現れ、 ForeColorの薄黄色の上に焦茶色の文字が 出てくれません そうして Form1.Designer.VB の コマンド群を眺めても、 TextBox1の プロパティウィンドウ を 見て廻っても、 それらを変更しそうなコマンド文や項目が 判らないのです 文字位置の背景色が青色に変らずに、指定したBackColor上で表示させるには、 どうしたら良いのか、お教え下さい 宜しくお願い申し上げます ____ akqsp より ____

  • VB2010でデータグリッドビューに列追加

    VB2010でデータグリッドビューを使用したいのですが、 下記のコードを実行すると、 ※エラー1「指定された列は DataGridView コントロールに既に属しています。」がでます。 列インデックスがいるのかなと、コードを追加してみると ※エラー2「プロパティIndexはReadOnlyです」がでました。 どう直せばよいかわかるかた教えてください。 どうぞよろしくお願いします。 変数に入っているもの 系列数=2 系列名(0)=deg 系列名(1)=V 系列名(2)=P Public Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "データビュー" '初期化 Me.DataGridView1.Columns.Clear() '列追加 Dim i, j As Long Dim TBColumn As New DataGridViewTextBoxColumn() For i = 0 To 系列数 TBColumn.Name = 系列名(i) TBColumn.Index = i '←※エラー2 エラー後に追加してみた Me.DataGridView1.Columns.Add(TBColumn) '←※エラー1 Next i '行追加 Me.DataGridView1.RowCount = データ数 'データ追加 For j = 1 To データ数 For i = 0 To 系列数 Me.DataGridView1(系列名(i), CInt(j - 1)).Value = グラフデータ(i, j) Next i Next j '列幅設定 For i = 0 To DataGridView1.Columns.Count - 1 Me.DataGridView1.Columns(i.ToString).Width = 30 Next i End Sub End Class