1

whileコマンドを 1 回実行した後にプログラムを一時停止し、もう一度繰り返すためbutton4_clickに再開するのを待ちたいと思い ます。button4 をクリックするたびに、whileループが 1 回実行されます。

コード:

private void button2_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(connectString);
    conn.Open();
    if (this.textBox3.Text != "")
    {
        this.listView1.Items.Clear();
        SqlCommand cmd = new SqlCommand("select * from customer", conn);
        SqlDataReader read = cmd.ExecuteReader();

        while (read.Read())
        {
            this.listView1.Items.Add(read.GetValue(0).ToString());
            this.listView1.Items.Add(read.GetValue(1).ToString());
            this.listView1.Items.Add(read.GetValue(2).ToString());
        }

        read.Close();
        conn.Close();
    }
}
4

1 に答える 1

1

ボタンをクリックするたびに単一の顧客レコードを処理したい場合、whileループは必要ありません。

代わりに、レコードを保存し、データベース接続を閉じ、button4 をクリックするたびに 1 つのレコードを処理する必要があります。

あなたが望んでいる方法でwhileループを実際に終了することはできません.それは彼らの目的に完全に反しています.

次のようなことを試してください:

private void button2_click()
{
    /* Open your database connection, retrieve your results, store them in 'read' as previously */
    recordList = new List<YourObject>(); //Define this at the class level, not the method level, so it is accessible to other methods
    while(read.Read())
    {
        recordList.Add(new YourObject(read.GetValue(0).ToString(), read.GetValue(1).ToString(), read.GetValue(2).ToString());
    }
    /* Close your connections */
}

private void button4_click()
{
    //You should probably check to make sure recordList[0] isn't null first
    this.listView1.Items.Add(recordList[0].A);
    this.listView1.Items.Add(recordList[0].B);
    this.listView1.Items.Add(recordList[0].C);
    recordList.removeAt[0];
}

クラスの外側 (名前空間内) に、スコープが限定されたクラス 'YourObject' を作成します。

private class YourObject
{
    string A,B,C;

    public YourObject( string a, string b, string c)
    {
        A = a;
        B = b;
        C = c;
    }
}
于 2013-04-11T18:53:59.017 に答える