[ad_1]
私の vb.net winforms プロジェクトでは、特定のフラグ ブール変数 (flagDataLoading) が true の場合、何もせずに終了したいフォーム クラスにサブがあります。 ただし、if ステートメントの内容の実行に進みます。 なぜこれを行うのですか?
Imports System.Configuration Imports System.Data.SqlClient Public Class Form1 Private flagDataLoading As Boolean = True Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load DataGridView1.DataSource = GetTestTable() flagDataLoading = False End Sub Private Function GetTestTable() Dim dtTest As New DataTable Dim connString As String = ConfigurationManager.ConnectionStrings("dbx").ConnectionString Using conn As New SqlConnection(connString) Using cmd As New SqlCommand("SELECT * FROM dbo.testTable", conn) conn.Open() Dim reader As SqlDataReader = cmd.ExecuteReader dtTest.Load(reader) End Using End Using Return dtTest End Function Private Sub DataGridView1_RowEnter(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.RowEnter If flagDataLoading = False Then Dim reply As DialogResult = MessageBox.Show("Save the current record?", "Question:", MessageBoxButtons.YesNo) If reply = DialogResult.Yes Then Dim connectionString As String = "Data Source=(localdb)\ProjectModels;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" Using conn As New SqlConnection(connectionString) conn.Open() Dim insertSql As String = "INSERT INTO dbo.testTable(testColumn) VALUES (@value)" Using transaction As SqlTransaction = conn.BeginTransaction Try For Each row As DataGridViewRow In DataGridView1.Rows If Not row.IsNewRow Then Using cmd As New SqlCommand(insertSql, conn, transaction) cmd.Parameters.AddWithValue("value", row.Cells("column1").Value) cmd.ExecuteNonQuery() End Using End If Next Catch ex As Exception End Try End Using End Using Else Return End If End If End Sub End Class
サブ DataGridView1_RowEnter は、入力された行を保存するかどうかをユーザーに確認することになっていますが、Form1_Load サブ中にデータベースのすべての既存のレコードに対してこれを行うため、If ステートメントに入れました。 flagDataLoading は、データ グリッドにデータベース テーブルからのデータがまだ入力されているかどうかを示すことになっています。
私が試したこと:
if ステートメントの前でブレークすると、ブール値が 真実つまり、if ステートメントは実行されるべきではありませんが、実行されます。
解決策 1
DataSource を設定した後でフラグに値を割り当てますが、RowEnter イベントは Load イベント メソッドが終了するまで実行されません。 その時までに、フラグはすでにリセットされています。
Load ではなく Shown イベントでフラグを false に設定してみてください。 コードが機能するのに十分なほど遅延する可能性がありますが、そうでない場合は、機能が完了するまで「待機」するタイマーを追加する必要があります。
[ad_2]
コメント