- PR -

GridVew、EditのTextBoxのTextChange

投稿者投稿内容
Clocky
会議室デビュー日: 2009/02/27
投稿数: 5
投稿日時: 2009-02-27 17:33
お世話になります。

VS2008 VBでのWebアプリケーションを開発しています。

現在、Gridviewコントロールで
編集中に表示しているTextBoxのTextChangeイベントが取得できません。

GridViewのRowCreatedイベントで

@
コード:
    Protected Sub GridView1_RowCreated(ByVal sender As Object, _

ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
If e.Row.Cells(2).Controls.Count > 0 Then
AddHandler Ctype(e.Row.Cells(2).Controls(0)).TextChanged, _
AddressOf Edit_txtbox_TextChanged
End If
End Sub

Protected Sub Edit_txtbox_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
'処理
End Sub




A
コード:
    Private WithEvents Txt_StaSch As TextBox

Protected Sub GridView1_RowCreated(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
If e.Row.Cells(2).Controls.Count > 0 Then
Txt_StaSch = MyCTbx(gvc(2).Controls(0))
End If
End Sub

Protected Sub Edit_txtbox_TextChanged(ByVal sender As Object, ByVal e As EventArgs) _
Handles Edit_txtbox.TextChanged
'処理
End Sub




@,Aともに、イベントは来ないようでした。
他にもEditRowのTextBoxをWithEventで定義したものに置き換えてみるなど
試したのですがやはりだめでした。

もっと普通にできるものなのでしょうか。

よろしくお願いします。

[ メッセージ編集済み 編集者: Clocky 編集日時 2009-02-27 18:00 ]
ぱると
会議室デビュー日: 2006/12/21
投稿数: 17
投稿日時: 2009-02-27 17:46
aspx側のTextBoxのOnTextChangedに定義してみてはどうでしょう?
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2009-02-27 17:52
> 編集中に表示しているTextBoxのTextChangeイベントが取得できません。

編集中、ということですけど、1文字入力するたびにポストバックさせる形でイベントを取りたいのでしょうか?それとも、更新のタイミングでイベントを取りたいのでしょうか?
そのあたりでやるべきことは変わってくると思います。

あと、こういった処理が必要となる列をテンプレート化することで、編集中だとEditTemplateの中におかれるTextBoxにたいしてIDEからプロパティやイベントを設定することができるようになります。
完全に動的にコントロールしようとするよりは、そっちのほうがよっぽど楽できるんじゃないかと思います。

Clocky
会議室デビュー日: 2009/02/27
投稿数: 5
投稿日時: 2009-02-27 18:00
引用:

ぱるとさんの書き込み (2009-02-27 17:46) より:
aspx側のTextBoxのOnTextChangedに定義してみてはどうでしょう?



回答ありがとうございます。

aspx側ではGridViewの定義の中に
EditBoxを配置できそうな場所は特になかったためどこにOnTextChangedを
定義できるのかが分からなかったためコードで対応しておりました。

GridViewには編集に関する項目はEditStyleだけかと思っているのですが
EditTemplate的なものがあるのでしょうか。

ちなみに編集はColumnsにCommandFieldを入れて行うようにしています。
Clocky
会議室デビュー日: 2009/02/27
投稿数: 5
投稿日時: 2009-02-27 18:04
やろうとしていることは。
複数のCellがあり、一番左のTextBoxに何か文字が入力されるまでは
その他のCellがEnable=Falseになるようにする。です

ですので、1文字ずつ確認する必要はないですが
データの更新時(RowUpdating)ではなく
TextBoxからフォーカスが抜けた時点でイベントが欲しいです。

引用:

あと、こういった処理が必要となる列をテンプレート化することで、編集中だとEditTemplateの中におかれるTextBoxにたいしてIDEからプロパティやイベントを設定することができるようになります。


FormViewなどでなくGridViewでEditTemplateを使うというのが
いまいちわかってないようなので調べてみます。

[ メッセージ編集済み 編集者: Clocky 編集日時 2009-02-27 18:06 ]
108
常連さん
会議室デビュー日: 2007/12/12
投稿数: 45
投稿日時: 2009-02-27 18:11
コード:
Protected Sub GridView1_RowCreated(ByVal sender As Object, _ 
ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) 
 If e.Row.Cells(2).Controls.Count > 0 Then 
  AddHandler Ctype(e.Row.Cells(2).Controls(0)).TextChanged, _ 
  AddressOf Edit_txtbox_TextChanged 
 End If 
End Sub 


書き間違いですか?
Edit_txtbox_TextChangedではなくて、
イベントがこないというのは、RowCreatedイベントが走らないということですか?

handlesがないのでは?
あとCTypeの引数??
Clocky
会議室デビュー日: 2009/02/27
投稿数: 5
投稿日時: 2009-02-27 18:23
すみません、CTypeのほうは元のコードから不要なコードを
削除する際の移植ミスです。

引用:

Edit_txtbox_TextChangedではなくて、
イベントがこないというのは、RowCreatedイベントが走らないということですか?

handlesがないのでは?
あとCTypeの引数??



でバクで確認しているのでRowCreatedイベントは走っています。
handlesがないのも移植みすです。
実際はDataListの中のGridViewなのでaspx側でイベント関数を登録しています。

RowCreatedが正常に呼ばれ、AddHandler も通っているのですが
そのTextBoxに文字を入力してもEdit_txtbox_TextChangedが呼ばれないという感じです。

ちなみにaspx側で<EditItemTemplate></EditItemTemplate>を書くと
デザイン表示をしたときにプロパティがありませんと表示されました。。。

EditTemplateとはaspx側で書くものではないんでしょうか…。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2009-02-27 18:31
内容に関係はありません(と思う)が。
http://dotnetfan.org/blogs/dotnetfanblog/articles/692.aspx

この最初のほうでフィールドをテンプレートに変換しています。
スクリーンショットがないとわかりにくいところですね。

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