В БД хранятся вопросы теста,но они выводятся в Label не попорядку,а рандомно и повторяются.В чем причина?
Подключение к БД
Код:
//class for load data from DataBase
class DataLoader1
{
//Fields
private DataTable dt;
string basePath;
//ctor
public DataLoader1()
{
basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Base1.dblite");
if (!File.Exists(basePath))
{
throw new FileNotFoundException("File of DataBase not found!");
}
dt = new DataTable("Table");
}
//Load data method
public DataTable GetTestData()
{
string connectionStr = @"data source=" + basePath;
using (SQLiteDataAdapter dAdapter = new SQLiteDataAdapter("SELECT * FROM Table", connectionStr))
{
dAdapter.Fill(dt);
}
return dt;
}
}
Код основной формы
Код:
public partial class Form6 : Form{
DataTable testTable = null;
volatile string answer = null;
EventWaitHandle wh = new AutoResetEvent(false);
public event EventHandler<TestEventArg> testResultEvent;
//ctor
string item;
public Form6(){
InitializeComponent();
rbNo.Checked = false;
rbYes.Checked = false;
this.Load += new EventHandler(Form6_Load);
btnStartTest.Click += new EventHandler(btnStartTest_Click);
testResultEvent += new EventHandler<TestEventArg>(Form6_testResultEvent);
}
//Event handler
void Form6_testResultEvent(object sender, TestEventArg e)
{
this.Invoke((Action)(() =>
{
progressBar1.Value = 0;
btnStartTest.Enabled = true;
lblQuestion.Text = "";
rbNo.Click -= rbYesNo_Click;
rbYes.Click -= rbYesNo_Click;
}));
string info = GetTestResults(e.testResult);
}
//rbClicks
void rbYesNo_Click(object sender, EventArgs e) {
string ans = ((RadioButton)sender).Text;
if (ans == "Да") {
answer = "answer_Yes";
}
else {
answer = "answer_No";
}
wh.Set();
}
//btnStartClick
void btnStartTest_Click(object sender, EventArgs e) {
progressBar1.Maximum = testTable.Rows.Count;
progressBar1.Minimum = 0;
progressBar1.Step = 1;
Task.Factory.StartNew(() => { Test(); });
btnStartTest.Enabled = false;
rbYes.Click += new EventHandler(rbYesNo_Click);
rbNo.Click += new EventHandler(rbYesNo_Click);
}
//FormLoad
void Form6_Load(object sender, EventArgs e) {
try {
DataLoader1 loader = new DataLoader1();
testTable = loader.GetTestData();
}
catch (Exception ex) {
MessageBox.Show(ex.Message, "Файл отсутствует");
this.Close();
return;
}
this.Text = "Тест"+ " 'Тип характера'";
}
//Test Method
void Test() {
int index = 0;
int result = 0;
while (index < testTable.Rows.Count) {
lblQuestion.Invoke((Action)(() => {
lblQuestion.Text = (string)testTable.Rows[index]["Question"];
}));
progressBar1.Invoke((Action)(() => { progressBar1.PerformStep(); }));
wh.WaitOne();
result += (int)testTable.Rows[index][answer];
index++;
}
if (testResultEvent != null) {
TestEventArg args = new TestEventArg(result);
testResultEvent(this, args);
}
}
string GetTestResults(int result)
{
if (result >= 0 && result <= 19)
{
MessageBox.Show();
}
else if (result >= 20 && result <= 25)
{
MessageBox.Show();
File.AppendAllText("Result.dat", "Профессионал!");
File.AppendAllText(Application.StartupPath + "\\Result.dat", "\r\n" + item, Encoding.Default);
}
else if (result >= 25)
{
MessageBox.Show();
File.AppendAllText("Result.dat", "Эпикуреец!");
File.AppendAllText(Application.StartupPath + "\\Result.dat", "\r\n" + item, Encoding.Default);
}
return null;
}
private void Form6_Load_1(object sender, EventArgs e)
{
BackColor = Color.Lavender;
}
private void btnStartTest_Click_1(object sender, EventArgs e)
{
}
}
//class for EventArgs
public class TestEventArg : EventArgs
{
public readonly int testResult;
public TestEventArg(int res)
{
testResult = res;
}
}
}