- PR -

DataGridViewによるDataSetの表示

1
投稿者投稿内容
やき
会議室デビュー日: 2008/11/04
投稿数: 2
投稿日時: 2008-11-04 16:13
お世話になります。下記現象のためにDataSetの内容の表示・編集ができずに困っています。解決法や、その他スマートな代替手法があればよろしくお願いします。

■ 現象
 DataSetの内容をDataGridViewにて表示させようとしていますが、うまく動作しません。BindingSourceを経由すればよいと思うのですが、実行すると空白の行が項目数分出てくるだけで、値が表示されません。
 BindingSourceを用いず、デザイナからDataSetのプロパティにてスキーマを定義すれば表示されますが、列数が多いためコードで作成したいと思います。

■ 目的
 テキストファイルより入手したデータをDataSetにいったん格納し、それをDataGridViewにて表示させること。

■ 開発環境
 VisualStudio2005、C# (必要であればSQLServer2005)

■ コード
private void button1_Click(object sender, EventArgs e)
{
 ds.Reset();// dsはDataSet
 ds.Tables.Add("Customers");
 DataTable _dt = ds.Tables["Customers"];
 _td.clear();
 
 //スキーマ定義。96個の列を作成。1列目、2列目を主キーにする。
 for (int i = 0; i <= 95; i++)
   _dt.Columns.Add(i.ToString(), typeof(object));
 
 _dt.PrimaryKey = new DataColumn[]{ _dt.Columns["0"] , _dt.Columns["1"]};
 
 string strLine; //読みこんだレコードが入る
 string[] strCols; //レコードを区切り文字で区切った文字列が入る配列
 int line; //読みこんだファイルの何行目かを示す、主キーの一つ。
 
 StreamReader sr = new StreamReader(_filename, _encoding);// ファイル読み込み。_filename,_encodingは事前に設定済み
 
 for(line = 0 ; (strLine = sr.ReadLine()) != null ; line++)
 {
   DataRow row = _dt.NewRow();
   strCols = strLine.Split(",".ToCharArray());
   row["0"] = line;//1列目には行数
  
   int colnum = 0;
   foreach (string colVal in strCols)
   {
     row[colnum.ToString()] = colVal;
     colnum++;
   }
   _dt.Rows.Add(row);
 }
 
 dataGridView1.DataSource = bindingSource1;
 bindingSource1.DataSource = ds;
 bindingSource1.DataMember = "Receipts";}
}

[ メッセージ編集済み 編集者: やき 編集日時 2008-11-04 16:15 ]
やき
会議室デビュー日: 2008/11/04
投稿数: 2
投稿日時: 2008-11-04 17:53
自己解決しましたので報告です。

■ 原因
 デザイナでDataGridViewのDataSourceプロパティを編集していたため。
 このプロパティを指定していると、たとえその指定先に変更が加えられようとも表示が更新されない(させる方法がもしかしたらあるかも?)

■ 解決法
 コード上でDataSourceの内容を変更する場合は、DataSourceを指定しない。変更をした後に、コード上でDataSourceを指定する。

■ コード(基本的に同じ)
コード:

private void btnSrc_Click(object sender, EventArgs e)
{
string _filename = txtSrc.Text;
ds.Reset();// dsはDataSet
ds.Tables.Add("Customers");
DataTable _dt = ds.Tables["Customers"];
_dt.Clear();
//スキーマ定義。96個の列を作成。1列目、2列目を主キーにする。
for (int i = 0; i <= 95; i++)
_dt.Columns.Add(i.ToString(), typeof(object));

_dt.PrimaryKey = new DataColumn[] { _dt.Columns["0"], _dt.Columns["1"] };
string strLine; //読みこんだレコードが入る
string[] strCols; //レコードを区切り文字で区切った文字列が入る配列
int line; //読みこんだファイルの何行目かを示す、主キーの一つ。
StreamReader sr = new StreamReader(_filename, Encoding.GetEncoding("Shift_JIS"));
// ファイル読み込み。_filename,_encodingは事前に設定済み
for (line = 0; (strLine = sr.ReadLine()) != null; line++)
{
DataRow row = _dt.NewRow();
strCols = strLine.Split(",".ToCharArray());
row["0"] = _filename;
row["1"] = line;//1列目には行数

int colnum = 2;
foreach (string colVal in strCols)
{
row[colnum.ToString()] = colVal;
colnum++;
}
_dt.Rows.Add(row);
}

dataGridView1.DataSource = bindingSource1;
bindingSource1.DataSource = ds;
bindingSource1.DataMember = "Customers";
}


なお、投稿時のコードはビルドできないものを添付してしまいました。申し訳ありませんでした。

[ メッセージ編集済み 編集者: やき 編集日時 2008-11-04 17:57 ]

[ メッセージ編集済み 編集者: やき 編集日時 2008-11-04 17:59 ]
1

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