DataGridView.DataSource没有来自网格的新行(.NET)

时间:2009-07-22 00:33:23

标签: .net winforms data-binding datagridview

我有一个datagridview,它最初绑定到一个空数据表。然后通过将值设置为网格的CurrentRow.DataBoundItem行的列来填充第一行。 我通过在最后一个空行中键入值手动输入新行。我点击了一个保存按钮: DataTable dt =(DataTable)MyGrid.DataSource .......

我注意到dt中的行数仅为1而不是网格中显示的两行。但是,如果我先在行上按Enter键然后单击“保存”,则行数为3.两个填充的行加上由Enter键引起的新行。

如何在不按Enter键的情况下将两行放在数据表中? (我不想以编程方式发送Enter键)

我试图调用EndEdit()和UpdateCellValue()来接受新行,但数据源仍然只显示一行。

4 个答案:

答案 0 :(得分:1)

如果您正在讨论Windows应用程序,我可以添加ds.AcceptChanges();

 if (txtUserId.Text.Trim() != "" && txtPasswoed.Text.Trim() != "" && txtUserName.Text.Trim() != "")
            {
                DataRow r = ds.Tables[0].NewRow();
                r["userName"] = txtUserName.Text.Trim();
                r["ID"] = txtUserId.Text.Trim();
                r["Password"] = txtPasswoed.Text.Trim();
                ds.Tables[0].Rows.Add(r);

                ds.AcceptChanges();

                txtPasswoed.Clear();
                txtUserName.Clear();
                txtUserId.Clear();
            }

答案 1 :(得分:0)

我最近回答了similar question,您应该使用Form.Validate()将数据推送回基础业务对象(您的DataTable),然后再将更改保存到数据库中。

答案 2 :(得分:0)

正如Jason所说,确保在插入DataTable后重新绑定网格。

myGrid.DataSource = dt;
myGrid.DataBind(); <-----

答案 3 :(得分:0)

我必须添加网格绑定的绑定源,而不是绑定到数据表。