2017-01-17 7 views
2
private void exam_Load(object sender, EventArgs e) 
    { 
     GetCount(); 

     MySqlConnection con = new MySqlConnection("server = localhost; user id = root; password =; database = dbtest1;"); 
     MySqlCommand cmd = new MySqlCommand("SELECT question, question_no, choice1, choice2, choice3, choice4 from quiz_tions where quiz_id = '" + lid + "' ORDER BY RAND() LIMIT " + count + ";", con); 
     MySqlDataAdapter sda = new MySqlDataAdapter(cmd); 
     DataTable dt = new DataTable(); 
     sda.Fill(dt); 

     label5.DataBindings.Add("Text", dt, "question"); 
     label6.DataBindings.Add("Text", dt, "question_no"); 
     rb1.DataBindings.Add("Text", dt, "choice1"); 
     rb2.DataBindings.Add("Text", dt, "choice2"); 
     rb3.DataBindings.Add("Text", dt, "choice3"); 
     rb4.DataBindings.Add("Text", dt, "choice4"); 
     dataRepeater1.DataSource = dt; 

     LoadData(); 


     label1.Text = qtitle; 
     label3.Text = qtype; 
    } 

У меня есть DataRepeater элемент управления, который заполняется с использованием приведенного выше кода. Каждый раз, когда этот код выполняется. , ,C# - лучший способ повторить все строки в datarepeater?

private void button3_Click(object sender, EventArgs e) 
    { 
     foreach (DataRepeaterItem c in dataRepeater1.Controls) 
     { 
      ss += ((Label)c.Controls["label5"]).Text + "\n"; 
     } 
     MessageBox.Show(ss); 
     ss = ""; 
    } 

Это дает мне разные результаты, когда я нажимаю различные строки перед нажатием кнопки (иногда 3 линии, иногда 4 линии), и это не всегда правильно, потому что я есть 5 строк на моем DataRepeater контроля, когда я исполняю это. Почему это происходит? Каков правильный способ перебора строк в DataRepeater?

P.S. Другая проблема (может быть), не связанная с моей записью, заключается в том, что всякий раз, когда я прокручиваю вниз/вверх по DataRepeater, иногда она автоматически проверяет случайный RadioButton в списке. Что случилось с этим контролем?

+0

Все тот же :( – ItaChi

+0

Вы уверены, что 'label5.Text' не пуст в некоторых элементы репитера? –

+0

Да, они не пустые. – ItaChi

ответ

1

Если Вы используете TextBox многострочный вы должны использовать \r\n вместо \n

текстовые поля для Windows необходимо CRLF для завершения строки, а не только LF.

Вы можете использовать \r\n

ss += ((Label)c.Controls["label5"]).Text + "\r\n"; 

или System.Environment.NewLine

ss += ((Label)c.Controls["label5"]).Text + System.Environment.NewLine; 

или StringBuilder

var sb = new StringBuiler(); 
foreach (DataRepeaterItem c in dataRepeater1.Controls) 
{ 
    sb.AppendLine(((Label)c.Controls["label5"]).Text); 
} 

ss+= sb; 
+0

Используйте trim, чтобы удалить лишние символы. ((Label) c.Controls [ "label5"]) Text.Trim(). –