- PR -

GridViewとCustomValidator

1
投稿者投稿内容
じゃらん
常連さん
会議室デビュー日: 2007/06/27
投稿数: 32
投稿日時: 2007-12-13 11:00
お世話になっています。
また教えて下さい。

ページにGridview/編集ボタン/更新ボタンを配置し以下の処理をさせています。
・画面初期状態では編集不可状態
・編集ボタン押下で全行編集可能状態
・チェックボックスで更新対象を選択し対象セル編集後、更新ボタン押下でDBに反映

ここでお聞きしたいのですが
1.ItemTemplateに配置したTxtboxに対し、CustomValidatorのonServerValidateで入力
  チェックを行いエラーがあった場合は更新ボタン押下直前の状態テキストボックス編
  集状態にしたいのですが、DBをもう一度読込みにいっているみたいで、編集前状態に
  なってしまう為、編集直後(更新ボタン押下直前)の状態にしたい。(皆さんはサー
  バ側のチェックはどのようにされているのでしょう?)
2.チェックボックスで選択された行のみ入力チェックを行いたい。
3.入力チェックはサーバー側で行いたい
  理由は入力チェックでDBの内容を参照しに行く為。クライアントでも可能であれば
  クライアントと両方チェックがベターです。

現在の検証処理の状況

・更新ボタン押下時のイベントの順序
    Page_Init
    GridView1_RowCreated
    GridView1_RowCreated
    GridView1_RowCreated
    GridView1_RowCreated
    GridView1_RowCreated
    Page_Load
    CustomValidator1_ServerValidate
    CustomValidator1_ServerValidate
    btnupdate_Click
    SqlDataSource1_Selected
    GridView1_RowCreated
    GridView1_RowDataBound
    GridView1_RowCreated
    GridView1_RowDataBound
    GridView1_RowCreated
    GridView1_RowDataBound
    GridView1_RowCreated
    GridView1_RowDataBound
    GridView1_RowCreated
    GridView1_RowDataBound
    GridView1_PreRender

・更新ボタンコードとonServerValidateのコード
  Protected Sub btnupdate_Click(ByVal sender As Object, ByVal e As
    System.EventArgs)

  If Page.IsValid = False Then Return

      更新処理

  End Sub

  Protected Sub CustomValidator1_ServerValidate(ByVal source As Object,
     ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs)

    If args.Value.Length = 0 Then
     args.IsValid = False
    End If

  End Sub

検証処理以外はできています。上記の実現方法のご教授宜しくお願いします。
情報不足の点がありましたらご指摘下さい。

追記
マスターページ、SqlDataSource使用

VS2005
ASP.NET 2.0
VB.NET
SQL SERVER 2005
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-12-14 06:37
1> ポストバックされたときにGridViewを再度バインドしなければ
  TextBoxの値は保持されるのでは?
  (つまり、ユーザーが編集した状態の値が保持される)

2> CustomValidatorのClientValidationFunctionでCheckBoxの値を
  チェックできませんか。

3> CustomValidatorをAjax化する。
たとえば、ClientValidationFunctionからWebサービスを呼び出す・・・
あと、CustomValidatorにUpdatePanelを適用するとか・・・
この場合、ユーザーから見るとJavaScript側でDBのチェックを行っているように見えます。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
じゃらん
常連さん
会議室デビュー日: 2007/06/27
投稿数: 32
投稿日時: 2007-12-14 11:02
Access様
返信ありがとうございます。

>1> ポストバックされたときにGridViewを再度バインドしなければ
>  TextBoxの値は保持されるのでは?
>  (つまり、ユーザーが編集した状態の値が保持される)
すいません。プログラムコード(GridView1.DataBind())でバインド処理をさせていれ
ばチェックフラグを設けて、再バインドするかしないか切り替えることができると思
いますが、現在はプログラムコードで処理していません。プログラムコードを使用せ
ずに再バインドを回避する方法はありませんか?
私の勘違いかもしれませんが、GridViewに表示されている内容が置き換わる(編集後
から編集前に)タイミングってGridView1_RowDataBoundであってますよね?

>2> CustomValidatorのClientValidationFunctionでCheckBoxの値を
>  チェックできませんか。
以下URLを参考にできました。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=666346&SiteID=7

>3> CustomValidatorをAjax化する。
>たとえば、ClientValidationFunctionからWebサービスを呼び出す・・・
ClientValidationFunctionのクライアント検証で、Sql Serverにアクセスし値をチェ
ックすることは可能なんでしょうか?

>あと、CustomValidatorにUpdatePanelを適用するとか・・・
CustomValidatorにUpdatePanelを適用すると2>のCheckBoxの値をチェックするところ
で"オブジェクト参照がオブジェクトインスタンスに設定されていません。"のエラー
がでてしまいます。

宜しくお願いします。
じゃらん
常連さん
会議室デビュー日: 2007/06/27
投稿数: 32
投稿日時: 2007-12-14 11:12
すいません。更新ボタン押下時のイベントの順序で一部抜けておりました。
又、補足ですが実行行数は2行で行っています。
    Page_Init
    GridView1_RowCreated
    GridView1_RowCreated
    GridView1_RowCreated
    GridView1_RowCreated
    GridView1_RowCreated
    Page_Load
    CustomValidator1_ServerValidate
    CustomValidator1_ServerValidate
    btnupdate_Click
    SqlDataSource1_Selected
    GridView1_RowCreated
    GridView1_RowDataBound
    GridView1_RowCreated
    GridView1_RowDataBound
    GridView1_RowCreated
    GridView1_RowDataBound
    GridView1_RowCreated
    GridView1_RowDataBound
    GridView1_RowCreated
    GridView1_RowDataBound
    GridView1_DataBound   <−−ここが抜けてました。
    GridView1_PreRender
1

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