我需要通过选择without上的任意位置来找到RowIndex
当前行的a 。基本上我需要它,因为我正在创建一个方法,该方法将根据. 而且我在各处都调用它,我不想再次编写相同的代码。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
}
}
现在我CheckBox
在gridview中有一个3列,所以每当我检查CheckBox
状态时,我正在执行以下操作并Object
再次加载并做一些数据库工作。
在复选框更改事件上
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
。我不知道该怎么做。请帮忙。