0

Csharp .NET4.0 と ms Visual Studio 2010 を使用。

私は本当にバグのある問題を抱えています。

最も売れた部品のリーグ テーブルを表示する datagridview があります。プログラムが行うことは、ユーザーが自分の知識と判断に基づいてリーグの位置を変更できるようにすることです。

数値を入力すると、ユーザーは進行状況を保存して、MS SQL ローカル サーバーのテーブルを更新できます。ただし、情報が保存される前に、情報が入力されている列に重複する番号がないかチェックするメソッドが実行されます。

重複が検出された場合は、保存を拒否し、別の小さな 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();

    }

null 型の定数チェックを免除する場合、この部分は重複を検出することを繰り返します。

さらにコードが必要な場合は、お尋ねください。喜んで提供させていただきます。

4

1 に答える 1

1

を適用してみてください

.Refresh() 

関数を DataGridView に追加します。それでもうまくいかない場合は試してください

.EndEdit()

情報を保存する前に、この権利を適用する必要があることに注意してください。

于 2012-05-18T09:16:46.967 に答える