使用 Csharp .NET4.0 和 ms Visual Studio 2010。
我有一个非常有问题的问题,至少可以说是把我烦死了。
我有一个 datagridview 显示最畅销零件的排行榜。该程序所做的是允许用户根据自己的知识和判断来改变联赛位置。
输入数字后,用户可以保存更新我的 MS SQL 本地服务器上的表的进度。但在保存信息之前,它会运行一个方法来检查输入信息的列中是否存在重复的数字。
如果它检测到任何重复,它将拒绝保存,并通知用户在另一个较小的 datagridview 中显示的部件名称。然后用户可以从这里选择显示的部分,它将自动导航并突出显示主数据网格视图,以便用户进行适当的更改。
现在问题如下,如果用户输入重复值,然后单击 datagridview 中的其他位置,然后单击保存,程序运行正确。
但是如果用户输入了一个重复的值并直接保存,那么它就会大错特错。基本上它会保存用户输入数据之前的数据,也不会显示任何重复的值。
我相信这是因为用户输入数据的单元格尚未更新。
如果有帮助,我可以提供一些代码。只是徘徊,如果这是一个常见修复的常见问题?
许多问候
代码:
private void saveMyProgressToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult result2 = MessageBox.Show("Do you wish to save you progress?",
"Important Question",
MessageBoxButtons.YesNo);
if (result2 == DialogResult.Yes)
{
CheckForDuplicate();
if (dupi == true)
{
CountMyGrid();
dupi = false;
}
else
{
Task t = new Task(() => SaveMyWorkI());
t.Start();
dupi = false;
}
}
}
上面的代码根据重复方法布尔切换检查是否可以保存。
public void CheckForDuplicate()
{
DataGridViewRowCollection coll = ParetoGrid.Rows;
DataGridViewRowCollection colls = ParetoGrid.Rows;
IList<String> listParts = new List<String>();
int count = 0;
foreach (DataGridViewRow item in coll)//379
{
foreach (DataGridViewRow items in colls)//143641
{
count++;
if ((items.Cells["NewPareto"].Value != null) && (items.Cells["NewPareto"].Value != DBNull.Value))
{
if ((items.Cells["NewPareto"].Value != DBNull.Value) && (items.Cells["NewPareto"].Value != null) && (items.Cells["NewPareto"].Value.Equals(item.Cells["NewPareto"].Value)))
{
if ((items.Cells["Part"].Value != DBNull.Value) && (items.Cells["Part"].Value != null) && !(items.Cells["Part"].Value.Equals(item.Cells["Part"].Value)))
{
listParts.Add(items.Cells["Part"].Value.ToString());
dupi = true;
}
}
}
}
}
MyErrorGrid.DataSource = listParts.Select(x => new { Part = x }).ToList();
}
如果您原谅对空类型的常量检查,这部分会循环检测任何重复项。
如果您需要更多代码,请询问并且很乐意提供。