dataGridView1.MultiSelect = false;int index=0if(dataGridView1.SelectedRows[0].Index>0)
{     index=dataGridView1.SelectedRows[0].Index;}为什么老显示数组超限啊显示信息:索引超出范围。必须为非负值并小于集合大小。
参数名: index小弟新手,望大家不要见笑,多多指教~

解决方案 »

  1.   

    哦,后面还有一句
    dataGridView1.Rows[index-1].Selected = true;//设置为选中
    主要是实现通过按钮调用此函数实现浏览上一条记录的功能
      

  2.   

    dataGridView1.SelectedRows[0].Index>0如果你没有选择行,SelectedRows数组是空的,当然越界了!
      

  3.   

    哦,这个不可能,因为一开始我先选择了行才触发事件,再说就算我不选,datagridview也有默认选择的行啊,所以不可能出现SelectedRows数组是空的吧
      

  4.   

    dataGridView1.MultiSelect = false;int index=0if(dataGridView1.SelectedRows[0].Index>0)//这句就会报错吧?
    {  index=dataGridView1.SelectedRows[0].Index;
      dataGridView1.Rows[index-1].Selected = true;//设置为选中
    }
      

  5.   

    datagridview是不是只有一空白行啊,这样的话会报错的,要先检测是否为null
      

  6.   

    要先判断一下,不然dataGridView1.SelectedRows[0]没有选中行
    SelectedIndexChanged  //GridViewRow row = CustomersGridView.SelectedRow;SelectedIndexChanging// GridViewRow row = CustomersGridView.Rows[e.NewSelectedIndex];这两事件直接得到选中行
      

  7.   

    判断
    dataGridView1.SelectedRows != null
    dataGridView1.SelectedRows.Count> 0
      

  8.   

    你选择的是一个单元格,你试试看在dataGridView行的最前面单击一下,整行的单元格都会被选中的,那才是选择了一行!
      

  9.   

    谢谢,我也发现这个问题了,我加了一个判断,但是第一次打开窗口选择时候要选择两次啊才可选中一行啊,第一次选中时selected还是空,怎么回事?
      

  10.   

    我是在datagridview上面加的工具栏,选中一行后点击工具按钮,触发事件
      

  11.   

    如果你确定是在DataGridView行最前面点击选中一行后,点击工具栏按钮,肯定可以的!
    不需要点击两次,除非你其他地方还有事件处理程序导致了问题,dataGridView控件,你还做了什么处理?
      

  12.   

    谢谢,我自己看看吧,没有什么其他处理了啊
    private void FomerItem()
            {
                dataGridView1.MultiSelect = false;
                int index = 0;
                if (dataGridView1.SelectedRows.Count != 0)
                {
                    if (dataGridView1.SelectedRows[0].Index > 0)
                    {
                        index = dataGridView1.SelectedRows[0].Index;
                        dataGridView1.Rows[index - 1].Selected = true;//设置为选中
                    }
                    else
                    {
                        dataGridView1.Rows[0].Selected = true;
                    }
                }
                else
                {
                    MessageBox.Show("请先选中操作行");
                }
            }case "btn_fomerItem":
                        FomerItem();
                        break;
      

  13.   

    case "btn_fomerItem":
                        FomerItem();
                        break;
    private void FomerItem()
            {
                dataGridView1.MultiSelect = false;
                int index = 0;
                if (dataGridView1.SelectedRows.Count != 0)
                {
                    if (dataGridView1.SelectedRows[0].Index > 0)
                    {
                        index = dataGridView1.SelectedRows[0].Index;
                        dataGridView1.Rows[index - 1].Selected = true;//设置为选中
                    }
                    else
                    {
                        dataGridView1.Rows[0].Selected = true;
                    }
                }
                else
                {
                    MessageBox.Show("请先选中操作行");
                }
            }
      

  14.   

    为什么要这样?
    if (dataGridView1.SelectedRows[0].Index > 0)
                    {
                        index = dataGridView1.SelectedRows[0].Index;
                        dataGridView1.Rows[index - 1].Selected = true;//设置为选中
                    }
    如果你只是要选中所有选择行的第一个if (dataGridView1.SelectedRows.Count>0)//有选择了行
                    {
                        index = dataGridView1.SelectedRows[0].Index;
                        
                        dataGridView1.CurrentCell=dataGridView1.Rows[index - 1].Cells[0];
    dataGridView1.Rows[index - 1].Selected = true;//设置为选中
                    }
      

  15.   

    哦,我是为了控制,因为一直是查找前一行,万一是第一行的话那么index就是0了,所以用了
    if (dataGridView1.SelectedRows[0].Index > 0)
      

  16.   

    if (dataGridView1.SelectedRows[0].Index > 0)控制选择行不是第一行
      

  17.   

    谢谢大家,问题解决代码如下
    dataGridView1.MultiSelect = false;
                int index = 0;
                if (dataGridView1.CurrentRow.Index > 0)
                {
                    index = dataGridView1.CurrentRow.Index;
                    dataGridView1.CurrentCell = dataGridView1.Rows[index - 1].Cells[0];
                    dataGridView1.Rows[index - 1].Selected = true;//设置为选中
                }
                else
                {
                    dataGridView1.Rows[0].Selected = true;
                }
      

  18.   

    if (this.dataGridView1.RowCount > 0 && dataGridView1.SelectedRows.Count>0)