C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: Datatableへの代入


(過去ログ 56 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■31584 / inTopicNo.1)  Datatableへの代入
  
□投稿者/ ひろし (1回)-(2009/01/24(Sat) 17:04:49)

分類:[.NET 全般] 

環境はVS2005です。

以下のように読込んだデータをdatatblに格納し、
DataGridにバインドしたいのですが、コンパイルは通りますが、
エラーとなってしまいます。
どのように解決すればよいのでしょうか?

DataTable tbl = new DataTable();
while (sqlDataReader.Read())
{
  tbl.Rows.Add(sqlDataReader["banner_id"].ToString());
 tbl.Rows.Add(sqlDataReader["Adv"].ToString());
}
sqlDataReader.Close();
this.DataGridView.DataSource = tbl;
this.DataGridView.DataBind();

エラーメッセージ:入力配列がこのテーブルの列数より長い値です

すみませんが、よろしくお願い致します。
引用返信 編集キー/
■31585 / inTopicNo.2)  Re[1]: Datatableへの代入
□投稿者/ ミッキー (10回)-(2009/01/24(Sat) 17:40:11)
エラーの内容はオブジェクト型を代入しようとしてるので発生していると思われます。
私はC#が分からないので、これ以上はお答えできません。
どなたかバトンタッチお願いします!

No31584 (ひろし さん) に返信
> 環境はVS2005です。
>
> 以下のように読込んだデータをdatatblに格納し、
> DataGridにバインドしたいのですが、コンパイルは通りますが、
> エラーとなってしまいます。
> どのように解決すればよいのでしょうか?
>
> DataTable tbl = new DataTable();
> while (sqlDataReader.Read())
> {
>   tbl.Rows.Add(sqlDataReader["banner_id"].ToString());
>  tbl.Rows.Add(sqlDataReader["Adv"].ToString());
> }
> sqlDataReader.Close();
> this.DataGridView.DataSource = tbl;
> this.DataGridView.DataBind();
>
> エラーメッセージ:入力配列がこのテーブルの列数より長い値です
>
> すみませんが、よろしくお願い致します。
引用返信 編集キー/
■31586 / inTopicNo.3)  Re[2]: Datatableへの代入
□投稿者/ いしだ (187回)-(2009/01/24(Sat) 17:47:11)
2009/01/24(Sat) 17:49:21 編集(投稿者)
こんばんは。

> DataGridにバインドしたいのですが、コンパイルは通りますが、
DataGridとDataGridViewは違いますよ。
この辺は正確に記述した方が良いですね。

DataTable tbl = new DataTable();
tbl.Columns.Add("banner_id");
tbl.Columns.Add("Adv");
while (sqlDataReader.Read())
{
    DataRow dataRow = tbl.NewRow();
   dataRow["banner_id"] = sqlDataReader["banner_id"].ToString();            
   dataRow["Adv"] = sqlDataReader["Adv"].ToString();
    tbl.Rows.Add(dataRow);
}
sqlDataReader.Close();
this.DataGridView.DataSource = tbl;
//this.DataGridView.DataBind();

こんな感じじゃないでしょうか。

※ 未検証です。

引用返信 編集キー/
■31587 / inTopicNo.4)  Re[3]: Datatableへの代入
□投稿者/ ミッキー (11回)-(2009/01/24(Sat) 18:00:20)
いしださん ご返信ありがとうございます。
早速試してみたのですが、
「列 'Adv' はテーブル に属していません。 」
のエラーが出てしまいます。
どういうことか分かりますでしょうか?

No31586 (いしだ さん) に返信
> 2009/01/24(Sat) 17:49:21 編集(投稿者)
>
> こんばんは。
>
>>DataGridにバインドしたいのですが、コンパイルは通りますが、
> DataGridとDataGridViewは違いますよ。
> この辺は正確に記述した方が良いですね。
>
> DataTable tbl = new DataTable();
> tbl.Columns.Add("banner_id");
> tbl.Columns.Add("Adv");
> while (sqlDataReader.Read())
> {
> DataRow dataRow = tbl.NewRow();
>   dataRow["banner_id"] = sqlDataReader["banner_id"].ToString();
>   dataRow["Adv"] = sqlDataReader["Adv"].ToString();
> tbl.Rows.Add(dataRow);
> }
> sqlDataReader.Close();
> this.DataGridView.DataSource = tbl;
> //this.DataGridView.DataBind();
>
> こんな感じじゃないでしょうか。
>
> ※ 未検証です。
>
引用返信 編集キー/
■31588 / inTopicNo.5)  Re[4]: Datatableへの代入
□投稿者/ いしだ (188回)-(2009/01/24(Sat) 18:06:15)
>tbl.Columns.Add("Adv");
これを忘れていませんか?
引用返信 編集キー/
■31589 / inTopicNo.6)  Re[5]: Datatableへの代入
□投稿者/ ミッキー (12回)-(2009/01/24(Sat) 18:16:53)
いしださん

tbl.Columns.Add("Adv");のAdv部分を違う名前にしておりました。
これはDataGridViewのタイトルに使用されるものと思い、タイトル(列名)のつもりで
変更しておりました。
Advにもどしたらうまくいきました。
ところで質問なのですが、列名のタイトルはどういう扱いになるのでしょか?
重ね重ね申し訳ありません。

No31588 (いしだ さん) に返信
> >tbl.Columns.Add("Adv");
> これを忘れていませんか?
引用返信 編集キー/
■31590 / inTopicNo.7)  Re[6]: Datatableへの代入
□投稿者/ いしだ (189回)-(2009/01/24(Sat) 18:23:36)
2009/01/24(Sat) 18:47:46 編集(投稿者)

> ところで質問なのですが、列名のタイトルはどういう扱いになるのでしょか?
> 重ね重ね申し訳ありません。

この場合の簡単な方法としては、

this.DataGridView.DataSource = tbl;
の後で、
this.DataGridView.Columns["banner_id"].HeaderText = "バナーID";
this.DataGridView.Columns["Adv"].HeaderText = "広告";

とやるか、又は、

tbl.Columns.Add("バナーID");
tbl.Columns.Add("広告");
として、
dataRow["バナーID"] = sqlDataReader["banner_id"].ToString();
dataRow["広告"] = sqlDataReader["Adv"].ToString();

って感じじゃないでしょうか。


列が既に決まっているのであれば、DataTableを動的に作るのではなく、
DataGridViewに型付データセット等を指定しておいて、DataGridViewに
最初から列タイトルを指定する方法がありますね。
引用返信 編集キー/
■31593 / inTopicNo.8)  Re[7]: Datatableへの代入
□投稿者/ ミッキー (13回)-(2009/01/24(Sat) 18:53:51)
いしださん

うまくいきました。
本当にありがとうございました。

No31590 (いしだ さん) に返信
> 2009/01/24(Sat) 18:47:46 編集(投稿者)
>
>>ところで質問なのですが、列名のタイトルはどういう扱いになるのでしょか?
>>重ね重ね申し訳ありません。
>
> この場合の簡単な方法としては、
>
> this.DataGridView.DataSource = tbl;
> の後で、
> this.DataGridView.Columns["banner_id"].HeaderText = "バナーID";
> this.DataGridView.Columns["Adv"].HeaderText = "広告";
>
> とやるか、又は、
>
> tbl.Columns.Add("バナーID");
> tbl.Columns.Add("広告");
> として、
> dataRow["バナーID"] = sqlDataReader["banner_id"].ToString();
> dataRow["広告"] = sqlDataReader["Adv"].ToString();
>
> って感じじゃないでしょうか。
>
>
> 列が既に決まっているのであれば、DataTableを動的に作るのではなく、
> DataGridViewに型付データセット等を指定しておいて、DataGridViewに
> 最初から列タイトルを指定する方法がありますね。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -