例如某个dataGridView中有一列不良通知单号需要校验是否重复
方法一:(hashtable)推荐使用
private void checkImportDuplicate_bigData()
{
bool flag = false;
Hashtable hash = new Hashtable();
for (int i = 0; i < this.dataGridViewEx1.RowCount; i++)
{
string rejectDocNum=Mes.Core.Utility.StrUtil.ValueToString(this.dataGridViewEx1.Rows[i].Cells[this.ColRejectDocNumber.Name].Value);
if (!hash.ContainsKey(rejectDocNum))
{
hash.Add(rejectDocNum, i);
}
else
{
this.dataGridViewEx1.Rows[i].DefaultCellStyle.BackColor = Color.Red;
int value = (int)hash[rejectDocNum];
this.dataGridViewEx1.Rows[value].DefaultCellStyle.BackColor = Color.Red;
flag = true;
}
}
if (flag)
{
MessageBox.Show(“不良通知单号有重复!”);
}
}
方法二:(双重循环)
private void checkImportDuplicate()
{
bool flag = false;
for (int i = 0; i < this.dataGridViewEx1.RowCount-1; i++)
{
for (int j = i+1; j < this.dataGridViewEx1.RowCount; j++)
{
if (
Mes.Core.Utility.StrUtil.ValueToString(
this.dataGridViewEx1.Rows[i].Cells[this.ColRejectDocNumber.Name].Value)
.Equals(
Mes.Core.Utility.StrUtil.ValueToString(
this.dataGridViewEx1.Rows[j].Cells[this.ColRejectDocNumber.Name].Value)))
{
this.dataGridViewEx1.Rows[i].DefaultCellStyle.BackColor = Color.Red;
this.dataGridViewEx1.Rows[j].DefaultCellStyle.BackColor = Color.Red;
flag = true;
}
}
}
if (flag)
{
MessageBox.Show(“不良通知单号有重复!”);
}
}
方法三:(双重循环优化)
private void checkImportDuplicate_bigData()
{
bool flag = false;
List strList=new List();
for (int i = 0; i < this.dataGridViewEx1.RowCount; i++)
{
strList.Add(Mes.Core.Utility.StrUtil.ValueToString(this.dataGridViewEx1.Rows[i].Cells[this.ColRejectDocNumber.Name].Value));
}
int N = 100;
int[] cl = new int[N];
List[] arrIntLists = new List[N];//存放不良通知单号在strList中的下标
for (int i = 0; i < strList.Count; i++)
{
arrIntLists[Convert.ToInt32(strList[i].Substring(strList[i].Length - 2))].Add(i);
cl[Convert.ToInt32(strList[i].Substring(strList[i].Length - 2))]++;
}
for (int i = 0; i < N; i++)
{
if (cl[i] > 1)
{
//对比arrIntLists中保存的2个或多个不良通知单号下标对应的不良通知单号是否相同
for (int j = 0; j < arrIntLists[i].Count-1; j++)
{
for (int k = j+1; k < arrIntLists[i].Count; k++)
{
if (strList[arrIntLists[i][j]].Equals(strList[arrIntLists[i][k]]))
{
flag = true;
this.dataGridViewEx1.Rows[arrIntLists[i][j]].DefaultCellStyle.BackColor = Color.Red;
this.dataGridViewEx1.Rows[arrIntLists[i][k]].DefaultCellStyle.BackColor = Color.Red;
}
}
}
}
}
if (flag)
{
MessageBox.Show(“不良通知单号有重复!”);
}
}