C# 一定数量的卖家不会堆积
我在数据表中对卖家进行排序。如果一个卖家达到一个门帘金额,它将成为“4级卖家的金额为X” 如果我打印If stations的值,它就会工作。我的所有级别的每个标签都有一个销售员 现在的问题是,如果另一个销售人员拥有相同的数量,标签将不会更新,并且仍将保持1个销售人员已达到该数量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
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();