【问题标题】:c# Index was outside the bounds of the arrayc#索引超出了数组的范围
【发布时间】:2015-11-06 05:06:28
【问题描述】:

您好,如果我将值 (i) 放入 itemsWS.getItemInfo(itemLis[i].ToString())

p>
    object[] itemDetails;
    object[] itemLis = itemsWS.searchItem("", "bread", "all");
    int xs = 35;
    int clefts = 0;

    for (int i = 0; i < itemLis.Length; i++)

    {
        itemDetails = itemsWS.getItemInfo(itemLis[i].ToString());
        Button myButtons = new Button();
        myButtons.Click += delegate
        {

            dataGridView1.ColumnCount = 11;

            dataGridView1.Columns[0].Name = "Item Code";
            dataGridView1.Columns[1].Name = "Description";
            dataGridView1.Columns[2].Name = "Sale Price";
            dataGridView1.Columns[3].Name = "Category";
            dataGridView1.Columns[4].Name = "Type";
            dataGridView1.Columns[5].Name = "Status";
            dataGridView1.Columns[6].Name = "Low Count";
            dataGridView1.Columns[7].Name = "Medium Count";
            dataGridView1.Columns[8].Name = "High Count";
            dataGridView1.Columns[9].Name = "Item Picture";
            dataGridView1.Columns[10].Name = "TEST";

            //here is where i'm getting error if i put i on the []

            itemDetail = itemsWS.getItemInfo(itemLi[i].ToString());

            //

            dataGridView1.Rows.Add(itemDetail);
            MessageBox.Show("data grid displayed!");

        };


        myButtons.Text = itemDetails[1].ToString() + "\n  " + itemDetails[2].ToString();
        myButtons.Top = cleft * 180;
        myButtons.Left = 70;
        myButtons.Location = new Point(xs, clefts);
        myButtons.Size = new Size(100, 60);
        tabPage1.Controls.Add(myButtons);
        xs += 135;

        if (xs >= 537)
        {
            xs = 35;
            clefts += 80;
        }

(这是数据库)

问题是如果我将 [i] 替换为 [0]。它只会显示数据库中的第一个值项

(如果我将 [i] 替换为 [0],这里是 GUI)单击任何按钮都会重复相同的输出

任何帮助将不胜感激。我正在尝试使用生成的新按钮显示来自 MySQL 的项目,这些新按钮将显示在 datagridview 上。谢谢

【问题讨论】:

  • itemLis [] 可能没有足够的数据
  • itemsWS是什么类型的?
  • @Jon Bon Jovi Mateo itemsWS 是什么?
  • itemsWS 正在调用 Web 服务查询

标签: c# mysql visual-studio-2010 visual-studio c#-4.0


【解决方案1】:

尝试将 i 的值存储在委托示例中的局部变量中:

myButtons.Click += delegate
{
  …
  int local_i = i;
  itemDetail = itemsWS.getItemInfo(itemLis[local_i].ToString());
  …
}

实际执行委托时,i 的值可能超出范围。

更新: 如果没有看到应用程序中的所有其他代码,很难确定,但可能是 itemLis 在代理执行时不再包含该索引处的项目。

尝试使用 foreach 循环,这样在代理执行时您将不会从 itemLis 数组中检索项目。

foreach (var item in itemLis)
{
 itemDetails = itemsWS.getItemInfo(item);
    ....
    myButtons.Click += delegate
         {
         ...
         itemDetail = itemsWS.getItemInfo(item);
         ...    
     }
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多