- PR -

DataGridで任意の列の編集可/不可を制御したい

1
投稿者投稿内容
Matsu
会議室デビュー日: 2002/12/05
投稿数: 5
投稿日時: 2002-12-05 22:26
いつも参考にさせて頂いています。

[設定]
DataGridには、ボタン列の[編集,更新,キャンセル]と[削除]を
入れています。残りの列はテンプレート列を使用しています。
編集モードの時に、キー列は表示のみ、残りの列はテキスト
ボックスで編集可能にしています。
[問題点]
編集モードにした時に、テキストボックスに変わる一部の列を、
条件によって表示のみにしたいのですが、
どのように制御したらよいかわかりません。

どなたかご存じないでしょうか?

[追記]
編集中のキー入力をハンドリングするため
テキストボックスはHTMLのINPUT/TEXTを使用しています。
(Enterキーで次のフィールドへの移動、入力文字数チェック
などなどにJavaScriptを使っています。)
上記の理由によりテンプレート列を使っています。
焼きそば
ベテラン
会議室デビュー日: 2002/11/06
投稿数: 86
お住まい・勤務地: 東京
投稿日時: 2002-12-06 08:20
引用:

[問題点]
編集モードにした時に、テキストボックスに変わる一部の列を、
条件によって表示のみにしたいのですが、
どのように制御したらよいかわかりません。



ItemDataBoundイベントは試しましたか?
Matsu
会議室デビュー日: 2002/12/05
投稿数: 5
投稿日時: 2002-12-06 10:59
焼きそばさんありがとうございます。

引用:
----------------------------------------------------------------

ItemDataBoundイベントは試しましたか?

----------------------------------------------------------------
早速試してみました。
ItemDataBoundイベントでテキストボックスの
Disabled=Trueにして変更できないようにしました。

CType(e.Item.Cells(5).Controls(1), HtmlInputText).Disabled = True

本当は変更不可ではなく、表示のみにしたかったのですが、
妥協しました。他によい方法があれば教えてください。
焼きそば
ベテラン
会議室デビュー日: 2002/11/06
投稿数: 86
お住まい・勤務地: 東京
投稿日時: 2002-12-06 12:07
引用:

本当は変更不可ではなく、表示のみにしたかったのですが、
妥協しました。他によい方法があれば教えてください。


Readonlyプロパティでは用件を満たせませんか?
マシュー
常連さん
会議室デビュー日: 2002/11/29
投稿数: 39
投稿日時: 2002-12-06 12:22
Readonlyプロパティの使い方は、こんな感じです。・・・・よね。

<asp:BoundColumn DataField="ID" ReadOnly="True" HeaderText="品目コード"></asp:BoundColumn>
<asp:BoundColumn DataField="NAME" ReadOnly="True" HeaderText="品目名"></asp:BoundColumn>
<asp:BoundColumn DataField="TANKA" HeaderText="単価"></asp:BoundColumn>
Matsu
会議室デビュー日: 2002/12/05
投稿数: 5
投稿日時: 2002-12-06 13:08
焼きそばさん、マシューさんありがとうございます。

引用:
------------------------------------------------------------------

Readonlyプロパティでは用件を満たせませんか?

------------------------------------------------------------------

早速調べてみましたが、
テンプレート列のプロパティにReadonlyがありませんでした。
連結列でするとあるのですが、編集ボタンを押されたときに
テキストボックスの幅とか、キーイベント(JavaScript)を
設定したいので、連結列にはできません。

いろいろありがとうございました。
また、何か糸口があれば教えてください。

b.s.n
常連さん
会議室デビュー日: 2002/10/18
投稿数: 28
投稿日時: 2002-12-06 14:10
こんにちわ。
私も似たような現象でかなり参りました。
回答になっているか解りませんが、ASP.NETでの.vbでやっている方法です。


ItemDataBoundイベント(この場合、HTML側でデリゲートしても問題ない)で、

イベント行の1列目のコントロール1(このときはアイテムテンプレート列に
textboxを張り付けている)を読みとりのみに設定する。

CType(e.Item.Cells(1).Controls(1), TextBox).ReadOnly = True

という、書き方で対応しています。
ちなみに変更ボタンや、編集ボタンなどはいっさい利用しない方法ですので、
エディットカラムにテキストボックスなどを設定している場合には、
controls(xx)の代わりにfindcontrol("コントロールのWebID")で探して
おくほうがよいみたいです。

ちなみに私は、編集不可を実現するためにテンプレート列にテキストボックスとラベルを
張り付けて、その二つを切り替えることで実現させています。(無駄に遅い?)

Matsu
会議室デビュー日: 2002/12/05
投稿数: 5
投稿日時: 2002-12-06 15:20
b.s.n さんありがとうございます。
引用:
------------------------------------------------------------------
ちなみに私は、編集不可を実現するためにテンプレート列にテキストボックスとラベルを
張り付けて、その二つを切り替えることで実現させています。
------------------------------------------------------------------

上記の方法で、できるようになりました。まさにこのようなことをしたかったのです。
JavaScript部分も動くようになりました。

------------------------------------------------------------------
controls(xx)の代わりにfindcontrol("コントロールのWebID")
------------------------------------------------------------------

についてはまだこれからですが、controls(xx)ではわかりにくいので
findcontrol("コントロールのWebID")でやりたいと思います。

ありがとうございました。また、何かよい情報があれば教えてください。
1

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