0

なしRowIndexの任意の場所を選択して、現在の行のを見つける必要があります。に応じてを返すメソッドを作成しているため、基本的に必要です。そして、私はそれをどこでも呼び出しており、同じコードを何度も書きたくありません。GridviewSelectCommandObjectDataKeySelectedRowPage

これが私が持っているものです。

RowDataBound で

protected void gvOrders_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
      var dataKey = gvOrders.DataKeys[e.Row.RowIndex];

      if (dataKey == null)
            return;

      int orderId = AlwaysConvert.ToInt(dataKey["OrderId"]);

      Order cncOrder = OrderDataSource.Load(orderId);

       // do some work   

    }
}

現在、グリッドビューに 3 つのCheckBox列があるため、状態を確認するたびにCheckBox、次のことを行って再度ロードし、Objectデータベースの作業を行います。

On CheckBox Change イベント

protected void cbIsReceived_CheckedChanged(object sender, EventArgs e)
{
    GridViewRow row = ((GridViewRow)((CheckBox)sender).NamingContainer);
    var dataKey = gvOrders.DataKeys[row.RowIndex];

    if (dataKey == null)
          return null;

    int orderId = AlwaysConvert.ToInt(dataKey["OrderId"]);
    Order cncOrder = OrderDataSource.Load(orderId);

    // find the controls using the current row index
    CheckBox cbIsReceived = (CheckBox)gvOrders.Rows[row.RowIndex].FindControl("cbIsReceived");
    Label receivedDateText = (Label)gvOrders.Rows[row.RowIndex].FindControl("receivedDateText");

    // do some work
}

両方のイベントでわかるように、ほとんどのコードは を見つけてcurrent RowIndexロードし、Objectデータベースの作業を行います。

お気づきのように、両方のイベントで提供される引数が異なります。つまり、 OnRowBoundは (GridViewRowEventArgs e)、OnCheckBox_CheckedChangedは (EventArgs e) です。

したがって、すべてのCheckBox列に対して、同じコードを何度も書かなければなりません。

Senderを渡して現在の値を取得できるメソッドを作成したいと思いますRowIndex 。その方法がわかりません。助けてください。

4

1 に答える 1

0

CheckBoxes次のいずれかの方法で、3 つすべてから同じメソッドにイベントをルーティングできます。

  1. 3 つのチェックボックスすべてのイベントハンドラーcbIsReceived_CheckedChangedとして指定するか、または:
  2. 他のすべてのイベントを処理するメソッドをすでに生成している場合はCheckBoxes、自動生成されたすべてのメソッドに対してこれを行います。

    cbAnotherCheckBox_CheckedChanged(Object sender, EventArgs e)
    {
    
      // call the first method you've already written:
       cbIsReceived_CheckedChanged(sender, e);
    }
    

    編集: のそれぞれに異なる操作がある場合はCheckBoxes、行をループして、CheckBoxチェックされた特定のものを取得し、それに固有の操作を実行します。

于 2013-02-11T13:15:16.150 に答える