C# 索引超出范围。datagridview winforms
我想我把代码搞糟了,当手机点击时,它总是抛出这个异常 “索引超出范围。必须为非负且小于集合的大小。 参数名称:索引“ 这是我的密码C# 索引超出范围。datagridview winforms,c#,C#,我想我把代码搞糟了,当手机点击时,它总是抛出这个异常 “索引超出范围。必须为非负且小于集合的大小。 参数名称:索引“ 这是我的密码 [code] void dgMessages_CellClick(object sender, DataGridViewCellEventArgs e) { //try //{ // Ignore clicks that are not on button cel
[code]
void dgMessages_CellClick(object sender, DataGridViewCellEventArgs e)
{
//try
//{
// Ignore clicks that are not on button cells.
if (e.RowIndex < 0 || e.ColumnIndex != dgMessages.Columns["clmMessageId"].Index) return;
//// Retrieve the Row Index
string RowId = dgMessages[0, e.RowIndex].Value.ToString();
//// convert string to Integer
int RowIndex;
int.TryParse(RowId, out RowIndex);
//Row Index calculation here
int RowAdj = RowIndex - 1;
//Retrive the Error Queue Message for that particular Row Index
string MesId = dgMessages.Rows[RowAdj].Cells["clmTransMessage"].Value.ToString();
[/code]
如果rowindex=0(即第一行),则从中减去1,并使其成为-1。如果rowindex=0(即第一行),则从中减去1,并使其成为-1。如果rowindex为0,则RowAdj将被分配为-1。对dgMessages.Rows[-1]的调用失败。如果RowIndex为0,则RowAdj将被分配为-1。调用dgMessages.Rows[-1]失败。在赋值之前,您可以验证特定单元格是否具有该值
if (dgMessages.Rows[RowAdj].Cells["clmTransMessage"].HasValue)
{
String MesId=dgMessages.Rows[RowAdj].Cells["clmTransMessage"].Value.ToString();
}
Itz更安全的代码,以避免索引超出范围错误。在赋值之前,您可以验证特定单元格是否具有该值
if (dgMessages.Rows[RowAdj].Cells["clmTransMessage"].HasValue)
{
String MesId=dgMessages.Rows[RowAdj].Cells["clmTransMessage"].Value.ToString();
}
Itz更安全的代码,以避免索引超出范围错误。尝试以下方法:
string MesId = dgMessages.Rows[e.RowIndex].Cells["clmTransMessage"].Value.ToString()
试试这个:
string MesId = dgMessages.Rows[e.RowIndex].Cells["clmTransMessage"].Value.ToString()
字符串MesId=dgMessages.Rows[rowindex].Cells[“clmTransMessage”].Value.ToString();”。我也试过了。目前,基于单击的单元格,我的行id为21。是否可能在发生这种情况之前已从网格中清除了数据?检查dgMessages此时是否包含任何数据。我的意思是“string MesId=dgMessages.Rows[21]。Cells[“clmSender”].Value.ToString();在click方法中设置一个断点,然后查看dgMessages.Rows。我怀疑此时它是空的。昨天它工作正常,我只是扫描了我的数据库并创建了一个新的,现在抛出此消息。”字符串MesId=dgMessages.Rows[rowindex].Cells[“clmTransMessage”].Value.ToString();“。甚至我也尝试过。目前,基于单击的单元格,我的行id为21。是否有可能在这之前已从网格中清除了数据?此时请检查dgMessages中是否包含任何数据。我的意思是“string MesId=dgMessages.Rows[21]。单元格[“clmSender”].Value.ToString();在click方法中设置断点,并查看dgMessages.Rows。我怀疑此时它是空的。它昨天工作正常,我只是扫描了我的数据库并创建了一个新的数据库,然后立即抛出此消息。string MesId=dgMessages.Rows[rowindex].Cells[“clmTransMessage”].Value.ToString();“。甚至我也尝试过。目前,基于单击的单元格,我的行id为21。字符串MesId=dgMessages.Rows[rowindex]。单元格[“clmTransMessage”].Value.ToString();”。我也试过了。目前我的行号是21,基于手机点击。谢谢KaeL,已经更改了我的代码,工作方式像charm,我从其他论坛得到的答案。谢谢KaeL,已经更改了我的代码,工作方式像charm,我从其他论坛得到的答案。