- PR -

DataGridの制御: 行単位にボタンの表示、非表示方法

1
投稿者投稿内容
hide.skh
会議室デビュー日: 2003/03/01
投稿数: 6
お住まい・勤務地: 埼玉
投稿日時: 2003-03-17 14:44
皆さま始めまして。
現在、DataGridを用いたWebフォームで悩んでいます。

<前提>
・1つの行は、単純に「名称」「制御フラグ」で構成されたテーブル(DataView)を
 DataSourceにセットしています。
・制御フラグには True/False の値を持たせています。

<実現したいこと>
制御フラグが False ならば 名称のみ表示
制御フラグが True  ならば 名称、ボタンを表示

この様な処理(表示)は可能でしょうか?
ぜひアドバイスをお願いいたします。
なお、VisualStudio.net + C# で開発しています。

なぬらに
会議室デビュー日: 2003/02/28
投稿数: 9
投稿日時: 2003-03-17 16:29
はじめまして なぬと申します

テンプレートカラムを使用して実現可能です。
1.テンプレートカラムを追加
2.ItemTemplateにボタンを置く
3.(DataBindings)プロパティの...
4.連結可能プロパティからVisibleを選択
5.カスタム連結でDataBinder.Eval(Container, "DataItem.制御フラグ")

手書きですと
コード:
<asp:TemplateColumn>

 <ItemTemplate>
  <asp:Button id=Button1 runat="server" Text="押す"
   Visible='<%# DataBinder.Eval(Container, "DataItem.制御フラグ") %>'>
  </asp:Button>
 </ItemTemplate>
</asp:TemplateColumn>


といった感じでどうでしょうか?
カスタムなデータ連結は使う機会が多いので覚えておくと便利だと思います。
それでは、以上よろくお願いします。

参考
プログラミングASP.NET
第10回 Webフォームにおけるデータ連結
    Part2 DataListコントロール

リンク修正(^^;

[ メッセージ編集済み 編集者: なぬ 編集日時 2003-03-17 16:47 ]
いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 2003-03-17 16:28
テンプレートカラムで、該当のボタンのVisible属性をデータバインドすればOKです。

<asp:TemplateColumn>
<ItemTemplate>
<asp:Label runat=server Text='<%# DataBinder.Eval(Container,DataItem.名称) %>'></asp:Label>
<asp:Button runat=server value="ボタン" visible='<%# DataBinder.Eval(Container,"DataItem.制御フラグフィールド名")%>' />
</ItemTemplate>
</asp:TemplateColumn>

:同時に書込みがありましたが、私のは<ItemTemplate>と<%# %>が抜けていました(^^;

[ メッセージ編集済み 編集者: いのつち 編集日時 2003-03-17 16:34 ]
hide.skh
会議室デビュー日: 2003/03/01
投稿数: 6
お住まい・勤務地: 埼玉
投稿日時: 2003-03-17 18:13
なぬさま、いのつちさま、ご回答ありがとございます。
おかげで無事解決しました!

なんとなーく、Templateタグ使うんだろうなぁ・・・という気はしてたんですけど、
具体的な記述方法が解らなかったので大変参考になりました。


※蛇足※
お二人のコードでは、
DataBinder.Eval(Container, "DataItem.制御フラグのフィールド名")
となっておりましたが、
Convert.ToBoolean で変換をした上でVisibleにセットしてあげないと
キャストエラーが出てしまい、返事まで時間がかかってしまいました。

DB(MSDE)側の「制御フラグ」フィールドは、
samllint型で定義しているのですが、VBみたく勝手に型変換してくれないんですね・・・。
1

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