使用ms visual studio和csharp .net4。
这是我必须检查重复的代码
public void CheckForDuplicate()
{
DataGridViewRowCollection coll = ParetoGrid.Rows;
DataGridViewRowCollection colls = ParetoGrid.Rows;
List<string> listParts = new List<string>();
int count = 0;
foreach (DataGridViewRow item in coll)//379
{
foreach (DataGridViewRow items in colls)//143641
{
if (items.Cells[5].Value == item.Cells[5].Value)
{
if (items.Cells[2].Value != item.Cells[2].Value)
{
listParts.Add(items.Cells["Keycode"].Value.ToString());
count++;
dupi = true;
//txtDupe.Text = items.Cells["Keycode"].Value.ToString();
//this.Refresh();
}
}
}
}
MyErrorGrid.DataSource = listParts;
}
这是允许用户保存之前的检查。
private void butSave_Click(object sender, EventArgs e)
{
CheckForDuplicate();
if (dupi == true)
{
txtDupe.Clear();
dupi = false;
}
else
{
SaveMyWorkI();
dupi = false;
}
}
这是它正在查看的数据:
现在,我知道逻辑一定是有缺陷的,因为它无论如何都会保存。我基本上是在pareto1上的每个单元格中搜索,以查看用户是否进行了任何重复,如果是这样,它将不会保存,而是在另一个 datagridview 中显示零件编号等……嗯,这就是计划。
所以有人可以看看这个并告诉我
1)在我的逻辑中这是失败的地方,如果检查是正确的呢?
2)列表是否可以添加信息,如果是这样,简单绑定到数据网格视图是否足以显示结果?
3)如果这只是一种非常糟糕的搜索方式,有人可以提供反映我想要实现的目标的代码。
非常感谢您未来的评论。
更新:: 好的,感谢您的帮助,我的算法现在可以工作了,但我的最后一个问题是显示在帕累托列上重复的零件编号,而不是显示长度。
public void CheckForDuplicate()
{
DataGridViewRowCollection coll = ParetoGrid.Rows;
DataGridViewRowCollection colls = ParetoGrid.Rows;
List<string> listParts = new List<string>();
int count = 0;
foreach (DataGridViewRow item in coll)//379
{
foreach (DataGridViewRow items in colls)//143641
{
count++;
if ((items.Cells[5].Value != null))
{
if ((items.Cells[5].Value != null) && (items.Cells[5].Value.Equals(item.Cells[5].Value)))
{
if ((items.Cells[2].Value != null) && !(items.Cells[2].Value.Equals(item.Cells[2].Value)))
{
listParts.Add(items.Cells["Keycode"].Value.ToString());
dupi = true;
}
}
}
}
}
MyErrorGrid.DataSource = listParts;
var message = string.Join(Environment.NewLine, listParts);
//MyErrorGrid.DataSource = message;
MessageBox.Show(message);
}
即使消息框正确显示结果?绑定到我的数据网格时我错过了什么吗?