我有一个命令按钮的代码,按下它时应该将数据添加到数据库,同时更新datagridview并添加一个新行
private void button1_Click(object sender, EventArgs e)
{
try
{
cn.Open();
cmd.CommandText = "INSERT INTO [Table](Code, Name, Price, units)VALUES('" + codeTextBox.Text + "','" + nameTextBox.Text + "','" + priceTextBox.Text + "','" + unitsTextBox.Text + "')";
cmd.ExecuteNonQuery();
cn.Close();
string col1 = codeTextBox.Text;
string col2 = nameTextBox.Text;
string col3 = priceTextBox.Text;
string col4 = unitsTextBox.Text;
string[] row = { col1, col2, col3, col4 };
tableDataGridView.Rows.Add(row);
tableDataGridView.RowCount++;
}catch(Exception bs)
{
}
结果是来自文本框的数据确实会转到数据库,当它被带到一个新行时会更新,但行数不会增加任何想法吗?
答案 0 :(得分:1)
您似乎正在使用DataGridView的DataSource属性。当此属性用于绑定到数据时,您无法直接向DataGridView显式添加行。您必须直接向数据源添加行。
您需要声明一个可用作可绑定源的数据表或列表,然后将其绑定为DataSource
tableDataGridView.DataSource = myDataTable;
tableDataGridView.Refresh();
如何做到这一点你能理解的最简单方法:
使用列创建数据表:
public DataTable CreateMyTableDatasource()
{
DataTable dt = new DataTable("dt");
dt.Columns.Add("col1".ToString());
dt.Columns.Add("col2".ToString());
dt.Columns.Add("col3".ToString());
dt.Columns.Add("col4".ToString());
return dt;
}
然后使用这样的数据表:
private void button1_Click(object sender, EventArgs e)
{
....
DataRow dr;
DataTable myDataTable = CreateMyTableDatasource();
dr = myDataTable.NewRow();
dr["col1"] = codeTextBox.Text;
dr["col2"] = nameTextBox.Text;
dr["col3"] = priceTextBox.Text;
dr["col4"] = unitsTextBox.Text;
myDataTable.Rows.Add(dr);
tableDataGridView.DataSource = myDataTable;
tableDataGridView.Refresh();
}
但是这将在tableDataGridView中只创建一行而没有任何先前的数据,所以首先,您需要将所有以前的数据填充到tableDataGridView的数据表中,然后添加一个新行。 How can I do this?