protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "EditRole ")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = GridView1.Rows[index];
string m_Login = " ";
m_Login = GridView1.DataKeys[row.DataItemIndex].Value.ToString();
ViewState[ "Login "] = m_Login;
//currencyLib.ShowMessage(this, " ",m_Login);
txtLogin.Text = m_Login;
BindRoles(m_Login);
BindData(m_Login);
}
}
这段代码在gridview的第一页是可以运行的,可是点了第二页就会出错.
提示
索引超出范围。必须为非负值并小于集合大小。
参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index
源错误:
行 79:
行 80: string m_Login = " ";
行 81: m_Login = GridView1.DataKeys[row.DataItemIndex].Value.ToString();
行 82:
行 83: ViewState[ "Login "] = m_Login;
源文件: d:\Vs.net 2005\fjepcMis\yhgl\Yhjs.aspx.cs 行: 81
------解决方案--------------------------------------------------------
m_Login = GridView1.DataKeys[row.DataItemIndex].Value.ToString();
直接用index不就行吗
------解决方案--------------------------------------------------------
m_Login = GridView1.DataKeys[row.DataItemIndex].Value.ToString();
row.DataItemIndex用e.Row.RowIndex替换
------解决方案--------------------------------------------------------
int index = Convert.ToInt32(e.CommandArgument); string m_Login = " "; m_Login = GridView1.DataKeys[index ].Value.ToString();这样应该就可。
------解决方案--------------------------------------------------------
同意楼上