【问题标题】:DataGridView.DataSource does not have new row from the grid (.NET)DataGridView.DataSource 没有来自网格(.NET)的新行
【发布时间】:2009-07-22 00:33:23
【问题描述】:

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

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

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

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

【问题讨论】:

  • 每次活动后你都正确地重新绑定了吗?

标签: .net winforms data-binding datagridview


【解决方案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();
            }

【讨论】:

    【解决方案2】:

    我最近回答了similar question,您应该在将更改保存到数据库之前使用 Form.Validate() 将数据推送回底层业务对象(您的 DataTable)。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我没有绑定到数据表。我从网格的数据源获取对数据表的引用,以从网格中获取值。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        相关资源
        最近更新 更多