- PR -

GridViewの編集機能について

1
投稿者投稿内容
新人
会議室デビュー日: 2006/07/21
投稿数: 12
投稿日時: 2006-07-27 19:05
お世話になっております。

VS2005でWeb開発を行っているのですが、
GridViewの編集機能についてお聞きしたいことがあります。

編集ボタンクリック時に、条件によって編集可能な列を変更することは
可能なのでしょうか。
RowEditing時に列のReadOnlyを変更するイメージがあるのですが。

このような事をやっておられる方はおられますでしょうか?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-07-27 19:58
引用:
編集ボタンクリック時に、条件によって編集可能な列を変更することは
可能なのでしょうか。

可能ですね。

引用:
RowEditing時に列のReadOnlyを変更するイメージがあるのですが。

まさにそのとおりだと思います。
何がひっかかる(orできない orわからない)なのでしょうか?現在RowEditingでどうやってます?
新人
会議室デビュー日: 2006/07/21
投稿数: 12
投稿日時: 2006-07-28 09:26
RowEditing内で的外れかもしれませんが以下のように記述しました。

Dim row As GridViewRow = GridView2.Rows(e.NewEditIndex)
Dim name As TextBox = CType(row.Cells(7).Controls(0), TextBox)
name.ReadOnly = True

GridViewの中
<asp:BoundField DataField="Name" HeaderText="Name">
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>

このように記述いたしますと、以下のエラーとなります。

指定された引数は、有効な値の範囲内にありません。
パラメータ名: index

ただ「GridView2.Rows(e.NewEditIndex).Cells(7).Text」を記述いたしますと
表示内容は取得できます。

おそらく「TextBox」の箇所が誤っているかと思うのですが・・・

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-07-28 17:14
ああなるほど。TextBoxのReadOnlyか。

BoundField自体のReadOnlyをtrueにしてあげると、そのフィールドは編集不可
つまりTextBoxとしてではなくLabelのように表示されます。
それではダメであくまでTextBoxとして見せた上でReadOnlyにするのが要件なのですか?

だとすると、RowEditingの時点ではまだTextBoxは生成されていないようです。
引用:
Dim name As TextBox = CType(row.Cells(7).Controls(0), TextBox)

つまり、このControls(0)がまだないのです。

引用:
ただ「GridView2.Rows(e.NewEditIndex).Cells(7).Text」を記述いたしますと
表示内容は取得できます。

これはむしろTextBoxがないことを物語っていますよね。

一応RowCreatedだとTextBoxとして取ることができます。
このイベントはいろんなタイミングで発生するので細かい判定が必要ですが。
新人
会議室デビュー日: 2006/07/21
投稿数: 12
投稿日時: 2006-07-31 09:31
TextBoxのReadOnlyを行おうとしておりましたが、
BoundField自体のReadOnlyを操作できるのであれば、
問題はございません。

ただ「RowEditing内でのBoundField自体のReadOnlyを操作」につきまして、
検討がつきません。

よろしければ教えて頂けないでしょうか。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-07-31 13:26
GridView2.Columns[7]
これでDataControlField型のオブジェクトが取得できるので、これを
BoundFieldにキャストすると、ReadOnlyが設定できます。
新人
会議室デビュー日: 2006/07/21
投稿数: 12
投稿日時: 2006-07-31 15:54
教えて頂きました方法で無事処理ができました。

お世話になりました。ありがとうございました。
1

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