Я пытаюсь сделать небольшое настольное приложение, чтобы сделать списки игроков на моем игровом сервере более простыми. Я сталкиваюсь с некоторыми проблемами. Вот немного кода ...
private void identityCombo_SelectedIndexChanged(object sender, EventArgs e)
{
if(connection.State == ConnectionState.Closed)
{
connection.Open();
}
jobsCombo.Enabled = true;
gradesCombo.Enabled = true;
groupCombo.Enabled = true;
String query = "SELECT * FROM users WHERE identifier=@id";
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.Parameters.AddWithValue("@id", identityCombo.SelectedItem);
MySqlDataReader reader = cmd.ExecuteReader();
groupCombo.Enabled = true;
while (reader.Read())
{
steamNameBox.Text = reader["name"].ToString();
jobsCombo.SelectedIndex = jobsCombo.FindString(reader["job"].ToString());
cashBox.Text = "$" + String.Format("{0:n0}", reader["money"].ToString());
bankBox.Text = "$" + String.Format("{0:n0}", reader["bank"].ToString());
}
steamNameBox.Visible = true;
steamNameLbl.Visible = true;
cashLbl.Visible = true;
bankLbl.Visible = true;
bankBox.Visible = true;
cashBox.Visible = true;
bankLbl.Visible = true;
groupLbl.Visible = true;
groupCombo.Visible = true;
phoneNumBox.Visible = true;
phoneNumLbl.Visible = true;
esxLbl.Visible = true;
jobLbl.Visible = true;
gradesLbl.Visible = true;
jobsCombo.Visible = true;
gradesCombo.Visible = true;
updateInfoBtn.Visible = true;
}
Я пытаюсь сделать так, чтобы у меня была система входа в систему (работает отлично, проблем нет), но затем она вызывает другое меню. На сервере вы можете иметь несколько идентификаторов. У меня есть способ выбрать их, и все просто отлично.
Вот моя проблема:
while (reader.Read())
{
steamNameBox.Text = reader["name"].ToString();
jobsCombo.SelectedIndex = jobsCombo.FindString(reader["job"].ToString());
cashBox.Text = "$" + String.Format("{0:n0}", reader["money"].ToString());
bankBox.Text = "$" + String.Format("{0:n0}", reader["bank"].ToString());
}
Я изменяю "jobsCombo.SelectedIndex", который вызывает событие, которое я настроил, которыйзагрузит «оценки заданий» (ранги) на основе выбранного задания.
private void jobsCombo_SelectedIndexChanged(object sender, EventArgs e)
{
loadJobGrades(jobsCombo.SelectedItem.ToString());
}
Вот изображение интерфейса для более подробной информации.
Вся информация процедурно извлекается из базы данных, задание автоматически выбирается из ComboBox слева на основе того, что они имеют в БД. Хорошо, проблема - при изменении выбора «работа», он должен заполнить ряды работ для него справа, но это не так.
private void loadJobGrades(String job)
{
String query = "SELECT * FROM job_grades WHERE job_name=@job";
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.Parameters.AddWithValue("@job", job);
MySqlDataReader reader = cmd.ExecuteReader();
MessageBox.Show("1");
while (reader.Read())
{
gradesCombo.Items.Add(reader["label"]);
MessageBox.Show("2");
}
}
private void jobsCombo_SelectedIndexChanged(object sender, EventArgs e)
{
loadJobGrades(jobsCombo.SelectedItem.ToString());
}
Второй раздел кода должен загружать оценки/ ранжируется на основе выбранного в настоящий момент окна «задание».
Проблема с первым кодом заключается в том, что Мне нужно создать / запустить новое средство чтения, что является проблемой . Я получаю сообщение «Уже есть открытый DataReader, связанный с этим соединением», потому что он запускается из события, которое также вызывается заполнением поля со списком.
Я пытался выяснить это в течение 10 часов, пожалуйстапомощь.