0

c# で Windows アプリケーションを開発しています。

約40kのレコードを含むグリッドビューがあります。

そのグリッドビューにはチェックボックスがあります。

チェックされたレコードのみを更新したかったのです。

私はそれのために次のコードを書きました>>

for (int i = 0; i < gvTradeFile.Rows.Count; i++)
            {

                try
                {
                    DataGridViewCell cell = gvTradeFile.Rows[i].Cells[0];
                    bool check = (bool)cell.Value;

                    if (check)
                    {
                        try
                        {
                            con.Open();
                            cmd = new SqlCommand("update tradeFile set Party_Code='" + txtTransferPartyCode.Text + "' where Party_Code='" + gvTradeFile.Rows[i].Cells[1].Value.ToString() + "' and TradeNo='" + gvTradeFile.Rows[i].Cells[6].Value.ToString() + "' and Sauda_Date='" + gvTradeFile.Rows[i].Cells[13].Value.ToString() + "' and OrderNo='" + gvTradeFile.Rows[i].Cells[14].Value.ToString() + "'", con);
                            cmd.ExecuteNonQuery();
                            con.Close();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                        finally
                        {
                            con.Close();
                        }
                    }



                }
                catch (Exception ex)
                {
                }
            }

これを見るとfor loop、グリッド内の各行を扱っています。

forループで[グリッドのチェックボックスを介して]チェックされた行のみを直接取得できる特定の手法はありますか?

上記のコードは正常に動作しますが、すべての行がチェックされるため、exe がハングします。

私を助けてください。

4

3 に答える 3

1

チェックボックスチェックイベントでは、チェックボックスがオンになっている場合はデータテーブルまたはディクショナリを維持してから、データベースを一括更新する必要があると思います。あなたは一括更新のためにグーグルすることができます

于 2013-03-22T12:35:04.887 に答える
1

2つのオプションを考えることができます。

  1. 保存を新しいスレッドに貼り付けてから、同僚/クライアントに保存されていると想定させるか、「保存中」のグラフィックを表示させることができます。

  2. 一度に最大 1000 レコードまで全体を分割します。このように、最初の 1k、編集、保存のみを表示しています。次に、次の 1k を表示し、編集して保存します。これにより、オーバーヘッドが削減されます。

于 2013-03-22T12:52:31.717 に答える