- PR -

ExcelをDataGridで表示するときの書式設定(Windowsフォーム)

1
投稿者投稿内容
うえつき
会議室デビュー日: 2004/09/06
投稿数: 14
投稿日時: 2004-10-28 00:14
いつも参考にさせていただいています。
OSはwindowsXP、Excelのバージョンは2003、
コードは VB.net2003 で作成しております。

Escelファイルのシートをデータグリッドでwindowsフォーム上に表示しています
コードでNullText="--"としたいのですがヘルプや参考資料のAccessのコードを
どうやってExcelに対応させたらよいのかよくわかりません。
特にMappingNameがどれに相当するのか、確証が得られなくて困っています。

Excell シートの内容はこんな感じです。
no# 日付  時間   項目  場所
--------------------------------------
1 X月XX日 X時XX分 ABCDE 第1工場
2 X月XX日 X時XX分 ABCDE 第3工場
3 X月XX日 X時XX分 ABCDE 第2工場

今は以下のようなコードを書いていますが、空欄セルはNULL表示のままです。

Dim CONNECTION_STRING As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & FileName & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes"""
Dim Sheet As String = "SELECT * FROM [seet1$]"

"--- OleDbConnection の宣言 ---"
Dim RirekiConnect As New OleDbConnection(CONNECTION_STRING)
"--- OleDbDataAdapter の宣言 ---"
Dim Adp As New OleDbDataAdapter(Sheet, RirekiConnect)
"--- DataSet の宣言 ---"
Dim Dst As New DataSet
"--- Fill の実行 ---"
Adp.Fill(Dst, "Test")

Dim DataGridTableStyle1 As New DataGridTableStyle
DataGridTableStyle1.MappingName = "seet1$"

Dim No As New DataGridTextBoxColumn
Dim Koumoku As New DataGridTextBoxColumn

Nitiji.MappingName = "日付"
Nitiji.NullText = "--"
DataGridTableStyle1.GridColumnStyles.Add(Nitiji)

Debug.WriteLine
DataGrid1.SetDataBinding(Dst, "test")
DataGrid1.CaptionText = Sheet

Mapping Name を利用するときはDataSouseでDataGridへバインドしなくては
ならなかったような記事を読んだような気もするのですが、
そうなるとExcellでどう表記したらよいのか余計にわからないのです…
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-10-28 08:35
おはようございます。

DataGridTableStyleのMappingNameは元になるDataTable名を指定します。

そしてDataGridTextBoxColumnのMappingNameはそのDataTableの列名を指定します。

ですから、元のデータがExcelであろうとAccessであろうとOracleであろうと同じです。

.NET TIPS DataGridコントロールで列の中央ぞろえや右ぞろえを指定するには?

http://www.atmarkit.co.jp/fdotnet/dotnettips/102dgcolalign/dgcolalign.html


[ メッセージ編集済み 編集者: とっと 編集日時 2004-10-28 08:37 ]
うえつき
会議室デビュー日: 2004/09/06
投稿数: 14
投稿日時: 2004-10-28 09:23
とっと様
引用:
DataGridTableStyleのMappingNameは元になるDataTable名を指定します。
そしてDataGridTextBoxColumnのMappingNameはそのDataTableの列名を指定します。



DataTableイコール データファイルだと思いこんでいました。
そういえば私の書いたコードにはDataTableを作成する内容がどこにも無いですね…
一度その記事を参考にもう一度やってみます。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-10-28 13:27
こんにちは。

引用:

うえつきさんの書き込み (2004-10-28 09:23) より:

そういえば私の書いたコードにはDataTableを作成する内容がどこにも無いですね…




いえ、ありますよ。

Adp.Fill(Dst, "Test")

ここでFillメソッドを実行した時にDataSet内に暗示的にDataTableを作成しています。
ですから、

Dim DataGridTableStyle1 As New DataGridTableStyle
DataGridTableStyle1.MappingName = "Test"

Dim Nitiji As New DataGridTextBoxColumn
Nitiji.MappingName = "日付"
Nitiji.HeaderText = "日付"
Nitiji.NullText = "--"
Nitiji.Width = 100
DataGridTableStyle1.GridColumnStyles.Add(Nitiji)

DataGrid1.TableStyles.Clear()
DataGrid1.TableStyles.Add(DataGridTableStyle1)

Me.DataGrid1.DataSource = Dst.Tables(0)

と、まあこんな感じで。もし別にDataTableを宣言したければ

Dim dtTable As DataTable
dtTable = Dst.Tables("Test")

として、

DataGridTableStyle1.MappingName = dtTable.TableName

で、

Me.DataGrid1.DataSource = dtTable

とやってもOKです。




うえつき
会議室デビュー日: 2004/09/06
投稿数: 14
投稿日時: 2004-10-29 10:08
とっと様、ありがとうございます!
書き込んだ後、DataAdapter.Fill(Dataset,DataTable名)
のはずなので、やっぱりDataTableは作成してあるような…と昼間中悩んでいました。
実力不足で、せっかくヒントをいただいても理解に時間がかかって申し訳ないです。

Fill(Dst,Test) としているのに
DataGridTableStyle1.MappingName = "Test" とせずに
MappingNameがいきなり別の名前になっているので、反映されないんですね

尚且つ、
TableStyles.Clear() を行っていないので設定が反映されるわけがない、という・・・。
(一回目のバインドならclear()の必要性は無いけれども。)
もう少し、DataTableとDataGridの関係について勉強してみます。
1

スキルアップ/キャリアアップ(JOB@IT)