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

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

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

Re[4]: データグリッドで一部の列の中身だけをデータバインドさせる


(過去ログ 44 を表示中)

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

■23567 / inTopicNo.1)  データグリッドで一部の列の中身だけをデータバインドさせる
  
□投稿者/ ぽっち (24回)-(2008/08/18(Mon) 18:32:32)

分類:[ASP.NET (C#)] 

こんにちは、いつもお世話になっております。

現在、データグリッド・データバインドの事で悩んでおります。
下記の様なデータがあったとして


【例】

発売時期 タイトル   著者     評価
20080301 ハリネズミ  静岡 咲   ***
20060904 LOVELESS   加藤成美   *****
20050101 ランダム   佐藤 蘭   **


著者の列にある「静岡 咲」の名前だけをデータバインドさせたい場合は、どのように記述すれば良いのでしょうか・・・?

DataTable data = (DataTable)Session["Data"];  //セッションでデータを受け取る
this.DataGrid1.DataSource = data.Rows[0][2];
this.DataGrid1.DataBind();


でやってみたら、「静」「岡」「咲」とバラバラでデータバインドされて下記のような出力をしてしまいました。

【出力結果】

著者


 




開発環境は、WindowsXP
使用言語は、ASP.NETとC#

です。
お手数ですが、誰かご教授下さい。

引用返信 編集キー/
■23571 / inTopicNo.2)  Re[1]: データグリッドで一部の列の中身だけをデータバインドさせる
□投稿者/ みきぬ (44回)-(2008/08/18(Mon) 19:30:51)
No23567 (ぽっち さん) に返信
> 著者の列にある「静岡 咲」の名前だけをデータバインドさせたい場合は、どのように記述すれば良いのでしょうか・・・?
>
> DataTable data = (DataTable)Session["Data"];  //セッションでデータを受け取る
>
このDataTableをもとにDataViewを作って、DataViewのRowFilterプロパティに "著者 = '静岡 咲'" のような感じに設定して、そいつを DataSource に指定すればええんじゃないでしょうか。


> 【出力結果】
>
> 著者
> 静
> 岡
>  
> 咲
>
これはこれでなかなか興味深い結果…。

引用返信 編集キー/
■23601 / inTopicNo.3)  Re[2]: データグリッドで一部の列の中身だけをデータバインドさせる
□投稿者/ ぽっち (25回)-(2008/08/19(Tue) 09:06:09)
No23571 (みきぬ さん) に返信
> ■No23567 (ぽっち さん) に返信
>>著者の列にある「静岡 咲」の名前だけをデータバインドさせたい場合は、どのように記述すれば良いのでしょうか・・・?
>>
>>DataTable data = (DataTable)Session["Data"];  //セッションでデータを受け取る
>>
> このDataTableをもとにDataViewを作って、DataViewのRowFilterプロパティに "著者 = '静岡 咲'" のような感じに設定して、そいつを DataSource に指定すればええんじゃないでしょうか。
>
>
>>【出力結果】
>>
>>著者
>>静
>>岡
>> 
>>咲
>>
> これはこれでなかなか興味深い結果…。
>

コメント有難うございます!

なんとか自力で解決できました。
セッションでデータを受け取った後に、下記のソースによって表示させたくない列を削除し、DataSourceへデータを格納し
バインドで上手く行きました!!

//不要な列削除処理
data.Columns.Remove("No");
data.Columns.Remove("Title");
data.Columns.Remove("Point");

this.DataGrid1.DataSource = data;
this.DataGrid1.DataBind();


それにしても
>>【出力結果】
>>
>>著者
>>静
>>岡
>> 
>>咲
>>

なったのは、本当に謎です。
解決済み
引用返信 編集キー/
■23604 / inTopicNo.4)  Re[3]: データグリッドで一部の列の中身だけをデータバインドさせる
□投稿者/ 魔界の仮面弁士 (821回)-(2008/08/19(Tue) 09:51:50)
2008/08/19(Tue) 11:45:43 編集(投稿者)

No23601 (ぽっち さん) に返信
> それにしても
> >>【出力結果】
> なったのは、本当に謎です。

元のコードは、要するに
 dataGrid1.DataSource = "静岡 咲";
 dataGrid1.DataBind();
を実行する事になりますよね。文字単位で分離されたのは、
 string s = "静岡 咲";
 IEnumerable<char> x = name;
 IEnumerable y = x;
であるからです。String クラスは IEnumerable インターフェイスを実装しています。

System.Web.UI.WebControls.DataGrid.DataSource は、「IEnumerable(または IListSource)」を
受け取る仕様なので、結果的に char ごとに分離されて表示されることになります。


ちなみに、System.Windows.Forms.DataGridView.DataSource の場合は、
IEnumerable を受け取らないため、このような現象は発生しません。

# ASP.NET の DataGrid の場合、IEnumerable/IListSource を受け取ります。
# WinForm の DataGrid の場合、IList/IListSource を受け取ります。
# WinForm の DataGridView は、IList/IListSource (/IBindingList/IBindingListView) を受け取ります。
## なお、IList インターフェイスは、IEnumerable インターフェイスを継承しています。
解決済み
引用返信 編集キー/
■23625 / inTopicNo.5)  Re[4]: データグリッドで一部の列の中身だけをデータバインドさせる
□投稿者/ ぽっち (26回)-(2008/08/19(Tue) 15:15:53)
No23604 (魔界の仮面弁士 さん) に返信
> 2008/08/19(Tue) 11:45:43 編集(投稿者)
>
> ■No23601 (ぽっち さん) に返信
>>それにしても
>>>>【出力結果】
>>なったのは、本当に謎です。
>
> 元のコードは、要するに
>  dataGrid1.DataSource = "静岡 咲";
>  dataGrid1.DataBind();
> を実行する事になりますよね。文字単位で分離されたのは、
>  string s = "静岡 咲";
>  IEnumerable<char> x = name;
>  IEnumerable y = x;
> であるからです。String クラスは IEnumerable インターフェイスを実装しています。
>
> System.Web.UI.WebControls.DataGrid.DataSource は、「IEnumerable(または IListSource)」を
> 受け取る仕様なので、結果的に char ごとに分離されて表示されることになります。
>
判りやすい御説明・解説誠にありがとうございます!!
なるほど・・・そういう仕様があるのですね!!
すごく納得し、勉強になりました!!


本当にありがとうございます!!
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -