【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

DataGridViewで図の様に2行目の下線に線を引きたい、2列目の右辺にラインを引きたいです。
できれば赤い色で引きたいです。
どうプログラムすればいいのかわかりません。
ご存知の方いらっしゃいましたら解決方法のコードを教えてください。


教えてgooに投稿するさい画像がうまく掲示できないようなのでうまく説明できないですが
よろしくお願いいたします。

「DataGridViewでグリッド内に線」の質問画像

A 回答 (3件)

こんにちわ。



ANo1さんが提示してくれたリンク先のソースは
DataGridView1.AdvancedCellBorderStyleを指定していますが
これをCellPaintingイベント時のEventArgsに置き換えることで
境界線を描画する事は実現できると思います。

RowIndexやColumnIndexで変更したいセル描画時に
e.AdvancedCellBorderStyle.Bottom=.....
を指定するとか。

また、色についてですが
DataGridViewCellの拡張になるんじゃないでしょうか?
DataGridViewCellにBorderColorなんてプロパティはなかったと思いますので。。。
    • good
    • 0

こんにちは。

少し、アプローチの仕方が違いますが、参考までにどうぞ。

セルの背景色を塗りつぶして、行幅と列幅を縮めれば、境界線
のように見えると思います。
「DataGridViewでグリッド内に線」の回答画像3
    • good
    • 0

参考URLの「セルの上下左右の境界線スタイルを個別に変更する」を参考にして対象行・列のセル全てに境界線設定を行えばよいでしょう。



参考URL:http://dobon.net/vb/dotnet/datagridview/cellbord …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
D-Matsuさんの紹介してくれたサイトは私も以前から見ていましたが、
各セルに適応する方法がわからずうまくプログラムすることができません。
もし、各セルに細かく設定する方法をご存知なら教えてください。

お礼日時:2012/04/20 14:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

QVB.NET DataGridView 縦スクロールバーを常に表示

VB.netについてなのですが、
DataGridViewの縦スクロールバーを常に表示したいです。
データ数によってスクロールバーが表示されたり非表示になったりしていますが、常に表示することは可能でしょうか。教えてください。

環境:
Visualstudio2005
windows XP
よろしくお願いします。

Aベストアンサー

Private vsBar As VScrollBar
Private Sub DataGridViewScrollBar_Load(ByVal sender As Object, ByVal e As EventArgs)
Me.tESTTableAdapter.Fill(Me.testdbDataSet.TEST)

For Each c As Control In dataGridView1.Controls
If TypeOf c Is VScrollBar Then
vsBar = DirectCast(c, VScrollBar)

AddHandler vsBar.VisibleChanged, AddressOf vsBar_VisibleChanged
End If
Next
End Sub
Private Sub vsBar_VisibleChanged(ByVal sender As Object, ByVal e As EventArgs)
If Not vsBar.Visible Then
'縦クロースバーを常に表示する。
Dim borderWidth As Integer = 2

vsBar.Location = New Point(Me.dataGridView1.ClientRectangle.Width - vsBar.Width, 0)
vsBar.Size = New Size(vsBar.Width, Me.dataGridView1.ClientRectangle.Height - borderWidth)
vsBar.Show()
End If
End Sub

ミスしてたらごめんなさい・・・orz

Private vsBar As VScrollBar
Private Sub DataGridViewScrollBar_Load(ByVal sender As Object, ByVal e As EventArgs)
Me.tESTTableAdapter.Fill(Me.testdbDataSet.TEST)

For Each c As Control In dataGridView1.Controls
If TypeOf c Is VScrollBar Then
vsBar = DirectCast(c, VScrollBar)

AddHandler vsBar.VisibleChanged, AddressOf vsBar_VisibleChanged
End If
Next
End Sub
Private Sub vsBar_VisibleChanged(ByVal ...続きを読む

Qデータグリッドビューの結合セルに文字を表示させたい

VB2010にて、データグリッドビューのセル(0,0)と(1,0)を結合して、
「dimensional data」と表示させたいです。
以下のコードでセル結合まではできたのですが、
セル(0,0)に「dimensi...」と表示されてしまい、文字が2つのセルをまたがってくれません。
どうしたらよろしいでしょうか。
ご存知の方教えてください。どうぞよろしくお願いいたします。

Aベストアンサー

> ペイントで右の境界線を消しただけです。
それは単純に「セル結合できてない」って言うのでは?

結合の機能はありませんので、自前でセルの文字を
描画して下さい。

セル自前描画のサンプルは WEB 上にいくつか公開されていますが、
セル結合そのもののコードは C# のが分かりやすかったです。
http://pub.ne.jp/arayan/?entry_id=2166972

CellPainting イベントを利用する際は、Graphics オブジェクトは
(引数より)システムが用意したものを流用するので問題ありませんが、
new Pen ~の部分など、自前で用意した描画オブジェクトは
Dispose するように改良した方がいいです。
そのあたりの処理は、以下のサンプルのほうが優秀です。
http://dobon.net/vb/dotnet/datagridview/ownerdrawcell.html
※ C# のコードでは using を使っています。

QDataGridViewでコードで値を入力したい

VB2005のDataGridViewですが、行と列を指定して
そのセルに値を入力したいと思いますが、どのプロ
パティに行番号・列番号を入れればいいのでしょうか?

Aベストアンサー

VB2005のDataGridView.rows(1).cells(2).value=3

QDataGridViewの各セル幅を自由に決め、その幅で固定したい

いつもお世話になっとります。

表示する文字列の長さに応じてセル幅を変えるのは

DataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.AllCells

これで可能ですよね。

DataGridViewの各セルの表示内容を、文字列の長さに関わらず、予め決められた幅で表示したいのですがどのように書けばいいのでしょうか。

.NET環境です。

Aベストアンサー

デザイン時にDataGridViewのcolumnsのコレクションの列のwidthで設定する。

DataGridView1.Columns(?).Width = *** で設定する。
?は0からの番号か列名

QDataGridViewでセルクリックイベントを発生させるには

DataGridViewでセルクリックイベントを発生させるには、
デザイナからではCellClickイベントハンドラとなりますが、
プログラムコード上から発生させるにはどのようにすればよろしいでしょうか?

CurrentCellでアクティブセルを変更した時に、そこのセルをクリックさせるイベントが欲しいのですが・・

宜しくお願い致します。

Aベストアンサー

CellClickイベントハンドラの内容を別のメソッドとして作り、アクティブセルを変更した際にそのメソッドを呼び出す方法ではダメなのでしょうか?
どうしてもCellClickイベントを発生させて処理をしたいのでしょうか?

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり

Q【C#】 あるイベントから別イベントを呼び出す。

タイトルの通り、あるイベント内から別イベントの処理を呼び出したいと
考えています。ですが、方法がわかりません。

【質問投稿に至った経緯】
現状は、検索から一覧を表示し1つを選択、選択した内容の更新を行なうプログラムを作成しています。選択した内容を更新するところまではできました。ただ、更新内容を確認できるよう一覧画面に前回検索した内容を一覧表示させたいと考えています。この時、検索イベントを呼び出し、一覧を再表示させようと思っています。

Aベストアンサー

「検索イベント」とは、[検索]ボタンをクリックした時の
イベント処理の事でしょうか?
それならば、一覧表示処理を別ルーチンに分けて、[検索]
ボタンClickイベントと同じルーチンをCallする様にすれば
良いと思いますが?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング