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,我从其他论坛得到的答案。