0

使用 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();

    }

如果您原谅对空类型的常量检查,这部分会循环检测任何重复项。

如果您需要更多代码,请询问并且很乐意提供。

4

1 回答 1

1

尝试应用

.Refresh() 

DataGridView 的函数。如果这不起作用,请尝试

.EndEdit()

请注意,您应该在保存信息之前应用此权限。

于 2012-05-18T09:16:46.967 回答