Datagridview(焦点或更新)无法获取正确的数据

时间:2012-05-18 08:43:37

标签: c# datagridview focus

使用Csharp .NET4.0和ms visual studio 2010。

我有一个非常错误的问题,也就是说至少会让我感到害怕。

我有一个datagridview,显示最畅销的部分联盟表。该计划的作用是允许用户根据自己的知识和判断来改变联盟的位置。

输入数字后,用户可以保存更新MS SQL本地服务器上的表的进度。但在保存信息之前,它会运行一种方法,检查列中是否包含输入信息的重复数字。

如果它检测到任何重复项,则拒绝保存,并通过另一个较小的datagridview显示部件名称通知用户。然后,用户可以在此处选择显示的部分,并自动导航并突出显示主数据网格视图,以便用户进行适当的更改。

现在问题如下,如果用户输入重复值,然后单击datagridview中的else where,然后单击save,程序将正确运行。

但是如果用户输入重复的值并直接进行保存,则会导致错误。基本上它会保存用户输入数据之前的数据,也不会显示任何重复值。

我认为这是因为用户输入数据的单元格尚未更新。

如果有帮助,我可以提供一些代码。如果这是常见问题的常见问题,那就徘徊吧?

许多问候

CODE:

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

    }

如果您原谅对null类型的常量检查,则此部分将循环检测任何重复项。

如果您需要更多代码,请尽快提出。

1 个答案:

答案 0 :(得分:1)

尝试应用

.Refresh() 

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

.EndEdit()

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