2010年12月9日星期四

GridView Databinding注意事項

GridViewのデータバインディングについて、MSDNにはいろいろな例がありますが、
EIDTモード場合のバインディングは足りないと思います。
GridViewはDatatableにバインディングした後、Editモードにするのはどうすればいいか、
はっきりしていないです。

実際にはGridViewのEditIndexを設定すればOKです。
即ち、以下のソースで説明します。
Protected Sub Grid_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs) _
    Handles grd.RowEditing 
   ’編集開始イベントの中で、新たな編集先行番を設定する必要です。
        grd.EditIndex= e.NewEditIndex
   '設定完了後、再びGridにDataSourceのバインディングが必要です。
        grd.DataBind()
End Sub

なお、編集キャンセルしたい場合、GridView.EditIndex=-1にリセットが必要です。
キャンセルボタンに関連することも可能です。
Protected Sub Grid_RowCancelingEdit(ByVal sender As Object, ByVal e As GridViewCancelEditEventArgs) _
    Handles grd.RowCancelingEdit
        grd.EditIndex= -1
        grd.DataBind()
    End Sub

===============
同じく、GridViewの行選択が変わりたい場合、GridView.SelectedIndexの指定が必要です。
以下例:
Protected Sub Grid_SelectedIndexChanging(ByVal sender As Object, ByVal e As GridViewSelectEventArgs)  Handles grd.SelectedIndexChanging
        grd.SelectedIndex = e.NewSelectedIndex
        grd.DataBind()
End Sub

===============

同じくGridViewの頁が変わりたい場合、GridView.PageIndexの指定が必要です。
以下例:
Protected Sub Grid_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs) _
    Handles grd.PageIndexChanging
        if grd.PageIndex <> e.NewPageIndex then
            grd.PageIndex = e.NewPageIndex
        End If
       grd.DataBind()
    End Sub

以上の例は皆変更しようとすると、対応Indexの設定が必要で、その後またDataBind()の再バインディングが必要です。しないと、データが表示しないです。
grdのDataSourceはGridViewのEnableViewState=trueの場合(ディフォルトはtrue)、ViewStateの保存されます、再DataSourceの指定は不要です、逆に指定したら、新たなDataSourceとして扱うことになります。

没有评论: