我有一个windowsform应用程序,用户可以在其中存储学生的姓名,电话号码和成绩。姓名列只存储字符串,而电话号码和成绩两列只存储整型。
我添加了一个按钮叫“添加学生”。它的目的是当用户完成填写三个文本框“姓名,电话号码和成绩”时使用,它会将它们存储在SQLite数据库中,数据会出现在数据网格视图中。
我的问题是,当按下按钮时,除了“名称”列外,所有列都正确显示。在DataGridView中,它将用户输入的所有名称显示为“0”,但当使用DB Browser for SQLite在数据库中查看时,名称显示正确。
我的密码:
private void RefreshData()
{
Datagridview1.Rows.Clear();
using SQLiteConnection SQLConnection = new(DBpath);
using var cmd = new SQLiteCommand(DBpath, SQLConnection);
SQLConnection.Open();
cmd.CommandText = "SELECT * FROM Students";
using (SQLiteDataReader read = cmd.ExecuteReader())
{
while (read.Read())
{
Datagridview1.Rows.Add(new object[] {
read.GetValue(0),
read.GetValue(1),
read.GetValue(2)
});
}
read.Close();
}
SQLConnection.Close();
}
public void WriteToTable()
{
string? SName = TXT_Name.Text;
int? SPhone = Convert.ToInt32(TXT_Phone.Text);
string SGrade = COMBO_Grade.Text;
using SQLiteConnection SQLConnection = new(DBpath);
using var cmd = new SQLiteCommand(DBpath, SQLConnection);
SQLConnection.Open();
cmd.CommandText = @"INSERT INTO Students(Name, Phone, Grade) VALUES ('" + SName + "', " + SPhone + ", '" + SGrade + "')";
cmd.ExecuteNonQuery();
SQLConnection.Close();
}
private void BTN_Add_Click(object sender, EventArgs e)
{
WriteToTable();
RefreshData();
}
Gif进一步证明
我试过检查datagridview属性,但它们都是正确的,我确保没有运行不必要的SQLite命令。
1条答案
按热度按时间qlzsbp2j1#
你的RefreshData方法不关心任何数据类型。GetValue()返回一个int。你想要的是一个string。因为你没有告诉它对象的实际类型,而且它最初是一个string,所以它被视为0(默认的int值)。
您要执行的操作:
我还注意到您的表缺少正确的ID。您应该确保至少包含一个唯一标识符。(电话号码可能不够)