1

カスタム グリッドビューがあり、RowDataBound で onclick のポストバック イベントを手動で生成しています。ただし、このポストバックは常に、行のクリック時に特定のメソッドに行きます/期待します。

そのポストバックを実現するための現在のコードは次のとおりです。

if (!String.IsNullOrEmpty(this.OnRowClick))
                e.Row.Attributes.Add("onclick", this.Page.ClientScript.GetPostBackEventReference(this.grid1, "Select$" + e.Row.RowIndex.ToString()));

ここでわかるように、ポストバックを実行するときにどのメソッドを呼び出すかを尋ねるプロパティをグリッドに設定しました...ただし、_dopostback 呼び出しでどのメソッドを呼び出すかを指定する方法を Web 上のどこにも見つけられないようです...例外なく、常に次のメソッドが必要です。

grid1_SelectedIndexChanged(object sender, eventargs e)

しかし、私はそれを望んでいません。プロパティ OnRowClick に含まれるメソッド名に移動したい。

視覚的な人々のために現在どのように設定されているかを次に示します。

それだけです...よくわかりません。私は視覚的な人なので、これは誰にとっても少し役立つかもしれません:

カスタム コントロール セットアップ (縮小版):

[ その他のコントロール

-= グリッドビュー =-

その他のコントロール]

[(コントロールイベントプロパティ)

OnRowClick イベント (GridViewRow eventarg)]

[(コントロール イベント ワイヤアップ)

if(OnRowClick!=null)

this.GridView1.SelectedIndexChanged += InternalMethod(...)

[(内部メソッド(...))

GridViewRow 行 = this.GridView1.SelectedRow;

if(OnRowClick!=null)

OnRowClick(行);]]

これまでのところとても良いです...まったく問題はありません...しかし...次のように設定すると:

Htmlページ

-> カスタム コントロール (mygrid)

---> mygrid.OnRowClick += SomePageMethod(GridViewRow 行)

------> SomePageMethod は決して呼び出されません...

コントロールを複合コントロールとして作成したため、内部コードをステップ実行してデバッグすることができないため、なぜそれが発生していないのかわかりません... :S このイベントを適切にバブルアップするのを手伝ってください!

カスタム制御コード:

    this.grid1.SelectedIndexChanged += new EventHandler(grid1_SelectedIndexChanged);

    void grid1_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridViewRow row = this.grid1.SelectedRow;
        if(this.OnRowClick!=null)
            OnRowClick(this.grid1, row);

    }

    #region Events
    public delegate void RowClickEventHandler(object sender, GridViewRow SelectedRow);
    [Category("Events")]
    [Description("This event fires when a row is clicked, if it is defined")]
    public event RowClickEventHandler OnRowClick;
    #endregion

ウェブページのコード:

this.pgrSummary.OnRowClick += new SimplePager.SimplePager.RowClickEventHandler(pgrSummary_OnRowClick);

そして、そのメソッドは決して呼び出されません...

4

0 に答える 0