- PR -

DataTableオブジェクトにあるデータソースをDataGridViewに反映

1
投稿者投稿内容
youhei
会議室デビュー日: 2007/01/06
投稿数: 17
投稿日時: 2008-01-15 22:03
VS2005でC#、Windowsアプリケーションを開発しています。

今回初めてVS2005でWindowsアプリケーションを開発していまして、
DataTable内にあるデータソースをDataGridViewコントロールに表示するような画面を作っています。

処理の流れとしては、
(1)CSVファイルよりデータを読み込み、DataTableオブジェクトに格納。
(2)dataGridView1の列を定義
(3)CSVデータをdataGridView1に反映

になっていまして、それらの処理のソースが以下のようになっています。

-----------------------------------------------------------------------------------------

※※※ 画面(Form)上には"dataGridView1"というIDのDataGridViewコントロールが貼り付けてあります。※※※

public partial class ReadCsv01 : Form
{
DataTable dt = new DataTable();

public ReadCsv01()
{
InitializeComponent();

//(1)DataTableオブジェクトへCSVデータを格納
setDataTable();

//(2)DataGridViewの列を定義
setDataGridView();

//(3)DataGridViewに反映
dataGridView1.DataSource = dt;
}

//(1)DataTableオブジェクトへCSVデータを格納
private void setDataTable()
{
//(1-1) DataTableオブジェクトの列を定義
dt.Columns.Add("mise", typeof(string));
dt.Columns.Add("jyusyo", typeof(string));
dt.Columns.Add("tel", typeof(string));

//(1-2) CSVファイルからデータを読み込み、DataTableに格納
System.IO.StreamReader streamReader = new System.IO.StreamReader("C:\\\\\\\\temp\\\\\\\\MiseList.csv", System.Text.Encoding.GetEncoding(932));
while (streamReader.Peek() != -1)
{
string[] buffer = streamReader.ReadLine().Split(',');
dt.Rows.Add(buffer);
}
}

//(2)DataGridViewの列を定義
private void setDataGridView()
{
//(2-1)[mise]ボタンをdataGridView1に定義
DataGridViewButtonColumn col1 = new DataGridViewButtonColumn();
col1.Name = "mise";
dataGridView1.Columns.Add(col1);

//(2-2)[jyusyo]テキストボックスをdataGridView1に定義
DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn();
col2.Name = "jyusyo";
dataGridView1.Columns.Add(col2);

//(2-3)[tel]テキストボックスをdataGridView1に定義
DataGridViewTextBoxColumn col3 = new DataGridViewTextBoxColumn();
col3.Name = "tel";
dataGridView1.Columns.Add(col3);
}
}


-----------------------------------------------------------------------------------------

上記のプログラムを実行すると、dataGridViewer1には、
[mise]ボタン、[jyusyo]テキストボックス、[tel]テキストボックス、[mise]テキストボックス、[jyusyo]テキストボックス、[tel]テキストボックス
の計6つの列が作成され、後半3つの[mise]テキストボックス、[jyusyo]テキストボックス、[tel]テキストボックスの列に
CSVファイルより読み込んだデータがセットされています。

イメージとしては↓の感じになっています。
  mise | jyusyo | tel | mise | jyusyo | tel |
 -----------------------------------------------------------------------------
 (ボタン) |     |    | ○○商店 | 東京都板橋区・・・・ | 03-1111-2222
 (ボタン) |     |    | ○○事務 | 東京都新宿区・・・・ | 03-4444-5555
 (ボタン) |     |   | ×××屋 | 東京都港区・・・・  | 03-6666-7777

理想の動作としては、dataGridView1には[mise]ボタン、[jyusyo]テキストボックス、[tel]テキストボックスの
3つの列が表示されるようにしたいのですが、どこの部分を修正すればうまく動作するのでしょうか?
ご教授の程、宜しくお願い致します。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2008-01-16 07:26
引用:

youheiさんの書き込み (2008-01-15 22:03) より:

理想の動作としては、dataGridView1には[mise]ボタン、[jyusyo]テキストボックス、[tel]テキストボックスの
3つの列が表示されるようにしたいのですが、どこの部分を修正すればうまく動作するのでしょうか?
ご教授の程、宜しくお願い致します。


一度 MSDN をざーっと読んで、どういうことができるのか、どういう形で
動いているのか、を把握しておくといいですよ。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
youhei
会議室デビュー日: 2007/01/06
投稿数: 17
投稿日時: 2008-01-16 19:37
ぽぴ王子様 ありがとうございます。

教えて頂きましたDataGridView.AutoGenerateColumnsにfalseを設定し、
列が作成されないようにしましたが、改善されませんでした。

public partial class ReadCsv01 : Form
{
DataTable dt = new DataTable();

public ReadCsv01()
{
InitializeComponent();

dataGridView1.AutoGenerateColumns = false;

//(1)DataTableオブジェクトへCSVデータを格納
setDataTable();

//(2)DataGridViewの列を定義
setDataGridView();

//(3)DataGridViewに反映
dataGridView1.DataSource = dt;
}

・・・・

それとも、私がやったことは検討違いのことだったのでしょうか?
引き続きよろしくお願いいたします。
1

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