2

誰かが私にいくつかの指針を与えることができることを願っています。データベースから取得した値の変数セットに応じて、同じaspxページに複数のグリッドビューをプログラムで作成しているaspページがあります。

コード ビハインドで GridView をプログラムで作成しているため、ページが読み込まれるたびに、ポストバック、oninit などで gridview グリッドビューを作成する必要があります。現在、ページの OnInit 関数内でグリッドビューを作成しています。これは、ユーザーが行編集モードに入ってから [更新] (行更新) ボタン/リンクをクリックした場合を除いて、すべて正常に機能します。これにより、値が更新される前にデータベースからグリッド値をリロードするグリッドでのポストバックが強制され、RowUpdating イベントが起動されなくなります。どうすればこれを回避できますか? RowCommand イベントで選択したコマンドをキャプチャしようとしましたが、このイベントはポストバック後にのみ発生するため、Rowcommand の前に oninit 関数が最初に呼び出されるため、キャプチャしたコマンド名はほとんど役に立ちません。

Oninit関数で次のようにGridViewを作成しています

    GridViewLineItem = New GridView
    If bEnableEdit = True Then
        GridViewLineItem.AutoGenerateEditButton = True
    End If

    If bEnableDelete = True Then
        GridViewLineItem.AutoGenerateDeleteButton = True
    End If

    GridViewLineItem.AutoGenerateColumns = False
    GridViewLineItem.EnableViewState = True
    GridViewLineItem.Font.Name = "Arial"
    GridViewLineItem.Font.Size = 8
    GridViewLineItem.ForeColor = Drawing.Color.Black
    GridViewLineItem.BackColor = Drawing.Color.White
    GridViewLineItem.BorderColor = Drawing.Color.LightGray
    GridViewLineItem.BorderStyle = BorderStyle.None
    GridViewLineItem.BorderWidth = 1
    GridViewLineItem.CellPadding = 4
    GridViewLineItem.AlternatingRowStyle.BackColor = Drawing.Color.White
    GridViewLineItem.FooterStyle.BackColor = Drawing.Color.BurlyWood
    GridViewLineItem.HeaderStyle.BackColor = Drawing.Color.DarkGray
    GridViewLineItem.HeaderStyle.Font.Bold = True
    GridViewLineItem.HeaderStyle.ForeColor = Drawing.Color.Black
    GridViewLineItem.PagerStyle.BackColor = Drawing.Color.Beige
    GridViewLineItem.PagerStyle.ForeColor = Drawing.Color.Black
    GridViewLineItem.PagerStyle.HorizontalAlign = HorizontalAlign.Right
    GridViewLineItem.RowStyle.BackColor = Drawing.Color.Beige
    GridViewLineItem.ID = "LineItemGridView" + strItemID

    strCBItemID = strItemID



    AddHandler GridViewLineItem.RowEditing, AddressOf GridViewLineItem_RowEditing
    AddHandler GridViewLineItem.RowCancelingEdit, AddressOf GridViewLineItem_RowCancelingEdit
    AddHandler GridViewLineItem.RowDataBound, AddressOf GridViewLineItem_RowDataBound
    AddHandler GridViewLineItem.RowUpdating, AddressOf GridViewLineItem_RowUpdating
    AddHandler GridViewLineItem.PageIndexChanging, AddressOf GridViewLineItem_PageIndexChanging
    AddHandler GridViewLineItem.PreRender, AddressOf GridViewLineItem_PreRender
    AddHandler GridViewLineItem.PageIndexChanged, AddressOf GridViewLineItem_PageIndexChanged
    AddHandler GridViewLineItem.RowDeleting, AddressOf GridViewLineItem_OnDeleting
    AddHandler GridViewLineItem.RowCommand, AddressOf GridViewLineItem_RowCommand



    'bind data source
    dt = New DataTable
    oda = New OleDb.OleDbDataAdapter
    oda.Fill(dt, rsGroup)
    GridViewLineItem.DataSource = dt
    GridViewLineItem.DataBind()

    'Add gridview to page    

    tCell.Controls.Add(GridViewLineItem)
    tRow.Cells.Add(tCell)
    TableLineItem.Rows.Add(tRow)


    LineItemPanel.Controls.Add(TableLineItem)
    LineItemPanel.BorderStyle = BorderStyle.Solid
    LineItemPanel.BorderWidth = 3
    LineItemPanel.BorderColor = Drawing.Color.DarkGray

    tGroupRow = New TableRow
    tGroupCell = New TableCell

    tGroupCell.ColumnSpan = TableGroupDetails.Rows.Item(0).Cells.Count
    tGroupCell.Controls.Add(LineItemPanel)

    tGroupRow.Cells.Add(tGroupCell)


    TableGroupDetails.Rows.Add(tGroupRow)

ユーザーが行の更新をクリックしたときにグリッドビューのデータバインドをスキップする方法について、誰かが私にいくつかの指針を教えてもらえますか? Gridview の Databind を無差別に page.IsPostback = false の周りに結び付けることはできません。グリッドは一度だけ読み込まれ、ユーザーがクリックして行編集モードに入るときなど、別の有効なポストバックが発生します。空のグリッド。

ありがとう

百万のサムガイに感謝します!GridView バインドを Page.PreRender に移動すると、問題が解決しました。私のイベントの流れは、Page.Oninit (グリッドビューが実行時に作成される場所) -> Page.Load (グリッドビュー バインド) -> GridView.RowUpdating (データベースへの変更をコミットしていた場所) でした。Page.OnInit (グリッドビューの作成) -> GridView.RowUpdating (データベースへの変更のコミット) -> Page.PreRender (グリッドビューがバインドされている場所) です。唯一の問題は、iTemplate を使用してグリッドビューの編集モード用に ajaxcombobox をレンダリングしていることです。これに対するユーザーの選択は、GridView.RowUpdating イベントが呼び出されるまでに失われます。テキストボックスなどの他のすべてのフィールドは、ユーザー入力値を保持します。これをもう少し掘り下げて、何が見つかるかを確認します。

PS何らかの理由で、これをあなたの投稿の下にコメントとして投稿できません...

PPS は、グリッドビュー編集モードでの Ajax Combobox の問題を修正しました。enableviewstate を true に設定する必要がありました

AjaxComb を新しい AjaxControlToolkit.ComboBox として薄暗くする

AjaxComb.EnableViewState = True

これは少し奇妙です...デフォルトがtrueだったと思うでしょう...

4

1 に答える 1

0

PostBack イベント処理ルーチンの後に、Page.LoadCompleteまたはイベントにGridView をバインドします。Page.PreRenderGridView 自体を DataSourceID と DataSourceControl にバインドすることもできます。

于 2012-07-06T04:13:40.373 に答える