当GridView数据行的排序发生改变时,使当前最近一次操作的数据行因为位置被取代而使被选中的记录变成了取代者。
我想了一种不漂亮的做法。欢迎大家告诉我简单漂亮的方法。下面是我的方法:
1、设置三个参数: IDLabel、IndexLabel、flagLabel
(存放当前最近一次操作选中行的ID, 为GridView中的DataKey),IndexLabel(最近一次操作行目前所在的位置),flagLabel(状态标志,表示数据中是否存在最近一次操作的数据行)
三个值我采用了在界面隐藏的Label来表示。
2、在GridView中的SelectedIndexChanged 事件中对IDLabel赋值
protected void GridView1_SelectedIndexChanged ( object sender , EventArgs e )
{
//TODO:选择按钮,赋值
FirstIDLb1.Text = GridView1.SelectedValue.ToString();
}
3、在GridView中的RowDataBound 事件中获取最近一次操作行目前所在的位置,并置flagLb3.Text="1" 表示数据中存在最近一次操作的数据行。
protected void GridView1_RowDataBound ( object sender , GridViewRowEventArgs e )
{
//TODO:绑定一条记录后的操作
//显示序号
if ( e.Row.RowType == DataControlRowType.DataRow )
{
e.Row.Cells [ 0 ].Text = ( e.Row.RowIndex + 1 ).ToString ( );
}
//获取第16单元格的Label控件,即Key(ID)字段值。当ID为隐藏状态时,需将其转换成模板,到绑定此字段的控件中获取值
Label ID = ( Label ) e.Row.Cells [ 16 ].FindControl ( "Label3" );
//若当前行FirstID等于之前操作记录的FirstID,则获取当前行的索引
try
{
if ( ID.Text == FirstIDLb1.Text )
{
IndexLb2.Text = e.Row.RowIndex.ToString ( );
flagLb3.Text = "1";
}
}
catch
{
}
4、在GridView的DataBound事件中指定选中行的索引
protected void GridView1_DataBound ( object sender , EventArgs e )
{
//TODO:所有数据重新绑定后,设置最后操纵记录为选中行状态
if ( flagLb3.Text == "1" )
{
GridView1.SelectedIndex = Convert.ToInt16 ( IndexLb2.Text );
}
else GridView1.SelectedIndex = -1;
flagLb3.Text = "0";
}