Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一定数量的卖家不会堆积_C#_Loops_Foreach - Fatal编程技术网

C# 一定数量的卖家不会堆积

C# 一定数量的卖家不会堆积,c#,loops,foreach,C#,Loops,Foreach,我在数据表中对卖家进行排序。如果一个卖家达到一个门帘金额,它将成为“4级卖家的金额为X” 如果我打印If stations的值,它就会工作。我的所有级别的每个标签都有一个销售员 现在的问题是,如果另一个销售人员拥有相同的数量,标签将不会更新,并且仍将保持1个销售人员已达到该数量 foreach (DataRow Drow in information.Rows) { int num = dataGridView1.Rows.Add(); dataGridView1.Rows[nu

我在数据表中对卖家进行排序。如果一个卖家达到一个门帘金额,它将成为“4级卖家的金额为X”

如果我打印If stations的值,它就会工作。我的所有级别的每个标签都有一个销售员

现在的问题是,如果另一个销售人员拥有相同的数量,标签将不会更新,并且仍将保持1个销售人员已达到该数量

foreach (DataRow Drow in information.Rows)
{
    int num = dataGridView1.Rows.Add();
    dataGridView1.Rows[num].Cells[0].Value = Drow["Namn"].ToString();
    dataGridView1.Rows[num].Cells[1].Value = Drow["Personnummer"].ToString();
    dataGridView1.Rows[num].Cells[2].Value = Drow["Distrikt"].ToString();
    dataGridView1.Rows[num].Cells[3].Value = Drow["Antal artiklar"];

    WhatLevel(salesman);
}
public void WhatLevel(推销员销售)
{
int levelOne=0;
int levelTwo=0;
int levelThree=0;
int levelFour=0;
如果(销售金额<50)
{
levelOne++;
label8.Text=levelOne.ToString();
}
如果(sales.amountsell>=50&&sales.amountsell<99)
{
levelTwo++;
label12.Text=levelTwo.ToString();
}
如果(sales.amountsell>=100&&sales.amountsell<199)
{
三级++;
label13.Text=levelThree.ToString();
}
如果(sales.amountsalled>=199)
{
四级++;
label14.Text=levelFour.ToString();
}
}       

您在WhatLevel方法中定义了4个局部变量。这4个变量的范围仅限于该方法。此外,当调用该方法时,它们总是在递增之前初始化为零

您必须执行以下操作之一:

  • 将4个级别*变量改为字段。这将保留对WhatLevel调用的值
  • 如果WhatLevel方法仅从foreach循环中调用,请将其内容直接移动到循环中,避免使用单独的方法,然后将变量声明放在foreach循环之前

    • 我同意朱利叶斯解决方案,但我想补充几点。 您不需要在每次迭代中更新label.Text。您可以在循环结束时执行此操作

      基于单一责任规则,我认为最好添加一个属性或一个方法来从sallers类获取级别

      最后使用一个集合来存储级别的数量,假设您有10或20个级别

      我建议这个解决方案

      将新属性添加到saller类

      public class Salesman
      {
          public int AmountSold { get; set; }
      
          // Can be a method if you don't want to have property with a lot of code
          public int Level
          {
              get
              {
                  if (AmountSold < 50)
                  {
                      return 1;
                  }
      
                  if (AmountSold >= 50 && AmountSold < 99)
                  {
                      return 2;
                  }
      
                  if (AmountSold >= 100 && AmountSold < 199)
                  {
                      return 3;
                  }
      
                  // AmountSold >= 199
                  return 4;
              }
          }
      }
      
      在类中,返回AmountSoldLevel而不是int

      public AmountSoldLevel Level
      {
          get
          {
              if (AmountSold < 50)
              {
                  return AmountSoldLevel.One;
              }
              // ...
          }
      }
      
      public AmountSoldLevel级别
      {
      得到
      {
      如果(销售量<50)
      {
      返回数量SoldLevel.1;
      }
      // ...
      }
      }
      
      和init字典使用

      Dictionary<AmountSoldLevel, int> levelNumbers = new Dictionary<AmountSoldLevel, int>();
      foreach (AmountSoldLevel amountSoldLevel in Enum.GetValues(typeof(AmountSoldLevel)))
      {
         levelNumbers.Add(amountSoldLevel, 0);
      }
      
      // ...
      
      label8.Text = levelNumbers[AmountSoldLevel.One].ToString();
      label12.Text = levelNumbers[AmountSoldLevel.Two].ToString();
      

      字典

      欢迎来到StackOverflow。你的问题是什么?这很难理解。试着记住,除了你告诉我们的之外,我们对你正在做的事情一无所知。你好!抱歉,我说得很不明白。我正在创建一个卖家数据表。如果他们达到一定的数量,那么它将成为“第4级卖家数量为:“X”“我在所有级别中只得到1个卖家。对不起,您的问题描述仍然太模糊。请您修改您的问题,以描述流量、预期行为和观察到的行为?您是否可以提供所有必要的信息,以便能够:?在
      WhatLevel()
      方法中,局部变量在每次调用该方法时都会重新开始。如果希望以这种方式实现逻辑,则每次调用该方法时都需要使用相同的变量。请参阅副本。请注意,这也不理想。有关更好的方法,请参阅本页上的其他一些建议。
      public AmountSoldLevel Level
      {
          get
          {
              if (AmountSold < 50)
              {
                  return AmountSoldLevel.One;
              }
              // ...
          }
      }
      
      Dictionary<AmountSoldLevel, int> levelNumbers = new Dictionary<AmountSoldLevel, int>();
      foreach (AmountSoldLevel amountSoldLevel in Enum.GetValues(typeof(AmountSoldLevel)))
      {
         levelNumbers.Add(amountSoldLevel, 0);
      }
      
      // ...
      
      label8.Text = levelNumbers[AmountSoldLevel.One].ToString();
      label12.Text = levelNumbers[AmountSoldLevel.Two].ToString();