簡體   English   中英

單擊按鈕時更改按鈕的文本c#

[英]Change text of button when button is clicked c#

第一次弄亂C#,我試圖在用戶單擊按鈕時更改按鈕的值。

數據庫中有四個名稱,執行代碼時,它僅顯示最后一行中的名稱。 我希望它以名字開頭,然后每次按下按鈕時,它應該顯示另一個名字,直到它遍歷數據庫中的所有名字為止。

dataReader = command.ExecuteReader();

while (dataReader.Read())
{
    bText = dataReader.GetValue(1).ToString();
    button1.Text = bText;
}

while循環無法按您認為的方式工作。 它的作用是遍歷每個結果並設置按鈕文本。 它不會在任何地方暫停(因為沒有任何內容告訴循環應該這樣做)。 因此,它只是盡可能快地遍歷每個元素。 這解釋了為什么您只看到最后的結果。

您可以做的是將計數器存儲在某個位置,該位置每次按下按鈕都會增加,並且僅使用第n個元素。 通過跳過前幾個條目或根據您使用的數據庫,您只能獲取特定的結果條目(在MySQL中,這在select查詢中為LIMIT和OFFSET)

對於您的特定問題(僅4個條目),我將在應用程序的開頭獲取所有條目並將它們存儲在數組中。 然后使用當前索引(=您的計數器)上的條目來設置按鈕的文本。

你可以試試看 我有一個名為Colors的表,該表有兩列:ID和Name。

public partial class FrmColor : Form
{
    SqlConnection con = new SqlConnection(@"<YOUR CONNECTION STRING HERE>");
    int pointer = 1;
    int rows = 0;

    public FrmColor()
    {
        InitializeComponent();
    }

    private void btnColor_Click(object sender, EventArgs e)
    {
        SqlCommand cmd = new SqlCommand("Select Name from Colors Where ID = @ID", con);
        cmd.Parameters.AddWithValue("@ID", pointer);

        con.Open();
        SqlDataReader rdr = cmd.ExecuteReader();
        rdr.Read();
        string colorname = rdr.GetValue(0).ToString();
        con.Close();

        btnColor.Text = colorname;

        if (pointer == rows)
        {
            pointer = 1;
        }
        else
        {
            pointer++;
        }
    }

    private void FrmColor_Load(object sender, EventArgs e)
    {
        SqlCommand cmd = new SqlCommand("Select count(Name) From Colors", con);
        con.Open();
        rows = (Int32)cmd.ExecuteScalar();
        con.Close();
    }
}

不要忘記using System.Data.SqlClient;添加using System.Data.SqlClient;

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM