- PR -

GridViewの編集可能列を動的に変更

1
投稿者投稿内容
koji
常連さん
会議室デビュー日: 2005/07/14
投稿数: 28
投稿日時: 2006-10-18 13:40
こんにちは。ASP.NET2.0(C#)で開発しています。
GridViewで行の編集ボタンを押された時に編集できる列を動的に変更しようとしています。
動的で無い場合は、aspxの方で、

コード:
<asp:BoundField DataField="aa" HeaderText="aa列" SortExpression="aa" ReadOnly="true" ></asp:BoundField>


のように指定すれば出来ますが、これを、例えばフォームがロードされたタイミングで決定したい場合はどのように実装すれば良いでしょうか?
GridViewのRowEditingイベントで設定すれば良いかと思い以下のように実装しました。

コード:
aspxファイル:
<asp:BoundField DataField="aa" HeaderText="aa列" SortExpression="aa" ></asp:BoundField>

aspx.csファイル:
((TextBox)(gridviewrow.Cells[1]).Controls[0]).Attributes.Add("readonly", "true");


しかしこれだと、テキストボックスが表示され、そのテキストの値が変更できない、というような状況になってしまいます。
一番上にあるコードの、あらかじめReadOnly="true"を設定する方法だと、テキストボックスが表示されないのですが、このようにしたいと思っています。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-10-18 14:03
静的に指定している場合と同じことをプログラムでやればいいのですから、こうなるかと。
((BoundField)this.GridView1.Columns[1]).ReadOnly = true;
koji
常連さん
会議室デビュー日: 2005/07/14
投稿数: 28
投稿日時: 2006-10-18 14:24
どっとねっとふぁんさん、ありがとうございます!

this.GridView1.Columns[1]
これに設定しようとしていたのですが、ReadOnlyが設定出来ませんでした。
BoundFieldにキャストすれば良かったのですね。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-10-18 14:53
this.GridView1.Columns[1]が返すのはDataControlFieldクラスですね。
これを適切なクラスにキャストする必要があります。
たいていはBoundFieldだと思いますけど、場合によってはCheckBoxFieldだったりするので
注意は必要ですね。
koji
常連さん
会議室デビュー日: 2005/07/14
投稿数: 28
投稿日時: 2006-10-19 17:03
なるほど、かならずBoundFieldでは無いという事ですね。
注意が必要ですね。
ありがとうございました!
1

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