なしRowIndex
の任意の場所を選択して、現在の行のを見つける必要があります。に応じてを返すメソッドを作成しているため、基本的に必要です。そして、私はそれをどこでも呼び出しており、同じコードを何度も書きたくありません。Gridview
SelectCommand
Object
DataKey
SelectedRow
Page
これが私が持っているものです。
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
。その方法がわかりません。助けてください。