System.argumentoutofrangeException: ‘索引超出范围。 必须为非负数且小于集合的大小。 参数名称:索引’


private void ItemGV_CellClick(object sender, DataGridViewCellEventArgs e)
       {
           if (e.RowIndex >= 0)
           {
               txtItemnum.Text = ItemGV.SelectedRows[0].Cells[0].Value.ToString();
               txtItemname.Text = ItemGV.SelectedRows[0].Cells[1].Value.ToString();
               comboCat.SelectedItem = ItemGV.SelectedRows[0].Cells[2].Value.ToString();
               txtitemprice.Text = ItemGV.SelectedRows[0].Cells[3].Value.ToString();
               //txtemail.Text = UserGV.SelectedRows[0].Cells[4].Value.ToString();
           }

我尝试过的:

在单击事件上,我正在编写代码,将网格值获取到文本框

解决方案1

我们不能告诉你“它就在那里!” 因为我们需要您的代码与您的数据一起运行,以准确找出发生问题的位置以及导致问题的值 – 在开始查看之前您需要这些 为什么 这是不对的!

我们所能做的就是解释为什么它会导致问题。 C# 中的数组是通过索引访问的值序列:并且该索引必须介于零和“值的数量减一”之间。 因此,如果您有一个包含五个整数的数组,则有效索引为 0、1、2、3 和 4。所有其他索引都会给出错误,因为您尝试处理的值不存在。
所以你可以说:

C#
i = arr[0];
i = arr[1];
i = arr[2];
i = arr[3];
i = arr[4];

但不是:

C#
i = arr[-1];
i = arr[5];
i = arr[666];

并且您的代码使用了多个数组,其中任何一个都可能是问题的根源。

所以,这将取决于你。
幸运的是,您有一个可用的工具可以帮助您了解正在发生的情况:调试器。 如果您不知道如何使用它,快速搜索“Visual Studio 调试器”应该可以为您提供所需的信息。

在函数的第一行放置一个断点,然后通过调试器运行代码。 然后查看您的代码和数据并找出应该手动发生的情况。 然后单步执行每一行,检查您期望发生的情况是否确实发生。 如果不是,那就是你遇到了问题,你可以回溯(或再次运行它并更仔细地查看)以找出原因。

据猜测,SelectedItems 集合为空,或者网格中没有足够的列,但您需要使用数据运行代码来判断。

抱歉,我们无法为您做到这一点 – 您是时候学习一项新的(并且非常非常有用)技能了:调试!

コメント

タイトルとURLをコピーしました