Проблема: информация из моей базы данных отображается не в той области приложения.
Как выглядит приложение: в моем приложении у меня есть сетка представления сетки данных, 2 текстовых поля для пользователей, чтобы ввести город и население, а затем несколько кнопок для управления данными, которые вводит пользователь, например, обновление , new, delete, а также общее население, наибольшее население, самое низкое население и среднее население.
Когда я запускаю программу: первая строка информации из базы данных появляется в текстовых полях, куда пользователь должен ввести данные. Мне нужно, чтобы информация базы данных отображалась в виде сетки данных, но в сетке просто есть пустые строки. Еще интереснее, когда я нажимаю на разные пустые строки, в текстовом поле появляются разные города и группы населения.
Это мой код:
private void Form1_Load(object sender, EventArgs e)
{
con = new SqlConnection();//object of SqlConnection class
//Connection string
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PopulationDB.mdf;Integrated Security=True;User Instance=True";
con.Open();//open connection
UpdateMyUI();
}
//method to update UI
private void UpdateMyUI()
{
cmd = new SqlCommand("Select * from City", con);
dr = cmd.ExecuteReader();
dt = new DataTable();
dt.Load(dr);
DeptdatagridView.DataSource = dt;
JustClearTextBoxBinding();
cnt = 0;
this.BindingContext[dt].Position = cnt;
JustTextBoxBinding();
dr.Close();
}
private void JustTextBoxBinding()
{
txtCity.DataBindings.Add("Text", dt, "City");
txtPopulation.DataBindings.Add("Text", dt, "Population");
}
private void JustClearTextBoxBinding()
{
txtCity.DataBindings.Clear();
txtPopulation.DataBindings.Clear();
}
private void btnNew_Click(object sender, EventArgs e)
{
ClearTextBoxes();
txtCity.ReadOnly = false;
btnInsert.Enabled = true;
btnNew.Enabled = false;
}
//method to clear textboxes
private void ClearTextBoxes()
{
txtCity.Clear();
txtPopulation.Clear();
txtCity.Focus();//set focus to city
}
private void btnInsert_Click(object sender, EventArgs e)
{
//sql query
string insertStr =
"Insert into city values('" + txtCity.Text + "','" + int.Parse(txtPopulation.Text) + "')";
cmd = new SqlCommand(insertStr, con);
int re = cmd.ExecuteNonQuery();
MessageBox.Show(re.ToString() + " row(s) affected!");
UpdateMyUI();
txtCity.ReadOnly = true;
btnNew.Enabled = true;
btnInsert.Enabled = false;
}
private void btnUpdate_Click(object sender, EventArgs e)
{
//SQL Update Query
string updateStr = "Update city Set population='" + int.Parse(txtPopulation.Text) + "' where city='" + txtCity.Text + "'";
cmd = new SqlCommand(updateStr, con);
int re = cmd.ExecuteNonQuery();
MessageBox.Show(re.ToString() + " row(s) affected!");
UpdateMyUI();
}
private void btnDelete_Click(object sender, EventArgs e)
{
string deleteStr = "Delete from city where city='" + txtCity.Text + "'";
cmd = new SqlCommand(deleteStr, con);
int re = cmd.ExecuteNonQuery();
MessageBox.Show(re.ToString() + " row(s) affected!");
UpdateMyUI();
}
private void btnTotalPopulation_Click(object sender, EventArgs e)
{
//sql query for total population
string totalStr = "select sum(population) from city";
//command object
cmd = new SqlCommand(totalStr, con);
//display average population
MessageBox.Show("Total Population:" + cmd.ExecuteScalar());
}
private void btnAveragePopulation_Click(object sender, EventArgs e)
{
//sql query for average population
string avgStr = "select avg(population) from city";
//command object
cmd = new SqlCommand(avgStr, con);
//display average population
MessageBox.Show("Average Population:" + cmd.ExecuteScalar());
}
private void btnHighestPopulation_Click(object sender, EventArgs e)
{
//sql query for highest population
string highestStr = "select max(population) from city";
//command object
cmd = new SqlCommand(highestStr, con);
//display Highest population
MessageBox.Show("Highest Population:" + cmd.ExecuteScalar());
}
private void btnLowestPopulation_Click(object sender, EventArgs e)
{
//sql query for lowest population
string lowestStr = "select min(population) from city";
//command object
cmd = new SqlCommand(lowestStr, con);
//display lowest population
MessageBox.Show("Lowest Population:" + cmd.ExecuteScalar());
}
}
}
Также Вот два изображения, чтобы дать вам более четкое представление о проблеме:
Я действительно близок к завершению этой программы, мне просто нужно, чтобы данные отображались в правильной области.