- PR -

DataGridの行編集ボタンを条件により不可視にしたいのですが

投稿者投稿内容
てっちゃん
常連さん
会議室デビュー日: 2005/05/10
投稿数: 23
投稿日時: 2005-05-17 14:32
いつも参考にさせていただいております。
ASP.NETにはまりっぱなしです。
DataGridで各行に編集ボタンを表示することは参考資料をもとに
出来たのですが、これを行の値により編集ボタンを表示したり
不可視にしたいのですが、可能でしょうか?
どなたかおわかりの方いらっしゃいましたら教えてください。
よろしくお願いします。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-05-17 14:53
手元に開発環境がないので記憶で。

・編集ボタン列を「テンプレート列に変換」
・HTMLビューで見ると、LinkButton あるいは CommandButton ができているので、
Visible='<%# 条件 %>' を加える

条件は、DataBinder.Eval(Container.DataItem, "フィールド名") なり、
DataItem の型がわかっているならダウンキャストするなりして設定できるはず。
てっちゃん
常連さん
会議室デビュー日: 2005/05/10
投稿数: 23
投稿日時: 2005-05-17 15:03
にしざきさん 早速のご回答ありがとうございました。
編集ボタンは
<asp:EditCommandColumn
ButtonType="PushButton"
EditText="編集"
UpdateText="確定"
CancelText="中止">
  :
になっていますので、ここのVisibleプロパティを
条件で与えてあげればいいのですね。
早速試してみたいと思います。
はまりこんだらまた質問するかもしれません。
その際はまたよろしくお願いします。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-05-17 18:58
多分(試していませんが)、EditCommandColumn のまま Visible を変えてしまうと、
列そのものがなくなって(全行で列がなくなる)しまいます。

それでよければ(もしくは私の推測が間違っているのなら)いいんですが、
そうでなく行ごとにボタンの有無を制御したいのであれば、
前投稿に書いてあるように一旦 TemplateColumn に変換して、
ItemTemplate 内にある CommandButton の Visible を設定してやる必要があると思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-17 20:46
 ItemDataBindだか、そんな名前のイベントが発生するので、その中で。。。あ、テンプレート列でないとダメ。

_________________
てっちゃん
常連さん
会議室デビュー日: 2005/05/10
投稿数: 23
投稿日時: 2005-05-18 07:44
にしざきさん、jittaさん アドバイスありがとうございます。
にしざきさんのご指摘の通り、行毎にボタンの有無を制御
したいのです。
TemplateColumnやItemTemplate等サンプルを探しては
まねしている状況で、基本がわかってないので駄目ですね。
あと名前空間やクラスなど理解しなくてはならないことが
あまりに多そうで混乱しそうです。
とはいえ、一つずつ理解していきますのでこれからも
よろしくお願いします。
背古井
常連さん
会議室デビュー日: 2004/04/02
投稿数: 39
投稿日時: 2005-05-18 11:21
こんにちは
以下のようにすると出来るはずです

1.ボタンを入れるグリッドシートの列をテンプレート列にする。

2.ボタンを入れる

3.htmlで2で入れたボタンが作成されているはずなので、その後ろに[CommandName]を入れる
例:<asp:ImageButton id="Cmd_ToolAdd" runat="server" ImageUrl="../common/image/Cmd_ToolAdd_VER.gif" AlternateText="装置追加" CommandName="Cmd_ToolAdd"></asp:ImageButton>

4.DataBind後[Ctype]を使用してボタンのVisibleをFalseにする
例:CType(Grd_DownLoad.Items(行番号).FindControl("Cmd_ToolAdd"), ImageButton).Visible = False

みたいな感じです
てっちゃん
常連さん
会議室デビュー日: 2005/05/10
投稿数: 23
投稿日時: 2005-05-18 11:25
にしざきさん おはようございます。
一応HTMLは次のように出来ました。

<asp:BoundColumn DataField="inpid" HeaderText="Inp" Visible="False">
               @
  <ItemStyle Font-Size="X-Small" HorizontalAlign="Left" Width="120px"
   VerticalAlign="Top"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="inpname" HeaderText="記入者">
  <ItemStyle Font-Size="X-Small" HorizontalAlign="Left" Width="120px"
   VerticalAlign="Top"></ItemStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="内  容">
  <ItemTemplate>
   <asp:Label ID="lblNaiyo" runat="server" Text='<%# Container.DataItem("naiyo") %>' />
  </ItemTemplate>
  <EditItemTemplate>
   <asp:TextBox ID="txtNaiyo" Runat="server" Text='<%# Container.DataItem("naiyo") %>' />
  </EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
  <ItemTemplate>
   <asp:Button runat="server" Text="編集" CommandName="Edit"
    CausesValidation="false" Visible='<%# Fnc_Idchk() %>'></asp:Button>
                        A
  </ItemTemplate>
<EditItemTemplate>

@のinpidがsession変数のidと同じ時はAがtrueになり、
それ以外はfalseにすればいいということはわかるのですが、
この設定をどこでしてあげればいいのかが全くわかりません。
ずぶの素人で申し訳ありませんが、お教え下さい。
よろしくお願いします。

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