2016-03-22 12 views
0

Her zaman aynı düğmeyi tıklatarak etiket içindeki bir içeriğin üzerine birkaç kez yazıyorum. Ne yazık ki, sadece bir kez nasıl geçersiz kılınacağını biliyorum. Karşılaştığım sorun, etiketteki verilerin bir SQL veritabanından gelmesi ve yalnızca etiketin içindeki verilerin kimliğini = 1 ile göstermesidir.C# Birden çok etkinliğe sahip düğme

MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); // Connectionstring to the database 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 
    private void btContinue_Click(object sender, RoutedEventArgs e) 
    { 
      try 
      { 
       conn.Open(); 
       MySqlCommand cmd = new MySqlCommand("SELECT l_question from l_liescale", conn); 

       MySqlDataAdapter adp = new MySqlDataAdapter(cmd); 
       DataSet ds = new DataSet(); 
       lbquestion.Content = cmd.ExecuteScalar(); //here I get the data into the label 
      } 
      catch (MySqlException ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 
      finally 
      { 
       conn.Close(); 
      } 
     } 
    } 

bir etikette veritabanından her veri kaydını görüntülemek için bir yolu var mı ve her zaman düğmeye tıklayarak bir sonraki kayıtla üzerine yazılmasını:

Bu benim kodudur?

cevap

3

Verilerin toplanması için ExecuteScalar() yerine ExecuteReader() kullanmalısınız.

StringBuilder sb = new StringBuilder(); 

using(var reader = cmd.ExecuteReader()) 
{ 
    while (reader.Read()) 
    { 
     var question = reader[0].ToString(); 
     sb.AppendFormat("Q: {0}\n", question); // use any other format if needed 
    } 
} 

lbquestion.Content = sb.ToString(); 

Ama iyi bir yol ItemsControl veya ListBox veya başka liste kontrolleri kullanmaktır.

Düğmeyi Eğer belleğe tüm kayıtları almak ve daha sonra olay işleyicisi içinde yineleme yapabilirsiniz tıklayarak yineleme isterseniz:

private readonly List<string> _questions; 
private int currentIndex = -1; 
public MainWindow() 
{ 
    InitializeComponent(); 
    _questions = GetQuestionsByDataReader(); 
} 

private void btContinue_Click(object sender, RoutedEventArgs e) 
{ 
    if(currentIndex < _questions.Count) 
    { 
     lbquestion.Content = _questions[++currentIndex]; 
    } 
} 
+2

'reader'' IDisposable', bu yüzden, sar lütfen edilir 'kullanarak': 'kullanarak (var reader = cmd.ExecuteReader()) {...}' –

+0

"ve her zaman bir sonraki kayıt ile üzerine tıklayarak" – gabba

+0

@DmitryBychenko TY ekleme için gerçekten gerekli kapatmak için Dispose'ı arayarak okuyucu. Cevabımı geliştirdim. –