【问题标题】:Re-bind datagrid when window is closed关闭窗口时重新绑定数据网格
【发布时间】:2011-04-01 14:25:32
【问题描述】:

我有一个显示来自 sql 服务器的数据的数据网格。我有一个添加按钮,单击它会打开一个新窗口,用户可以在其中放置正在添加的新项目的信息。当用户单击保存时,数据被保存到数据库中,但它没有显示在网格中。有没有一种方法可以在添加窗口关闭时使数据网格绑定?如果需要更多信息,请告诉我。谢谢。

在包含数据网格代码的主窗口中,我有一个添加按钮:

private void btnAdd_Click(object sender, RoutedEventArgs e)
{
        showAddWindow();
}

而且,showAddWindow 方法是:

private void showAddWindow()
{
    add addWindow = new  add(dgDataView);
    addWindow.Owner = this;
    addWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
    addWindow.ShowDialog();
}

【问题讨论】:

  • 您的网格绑定到什么? DataSet?还是直接到db?还是什么?
  • winforms 并绑定到数据集

标签: c# sql datagrid


【解决方案1】:

如果您知道新插入对象的 Id,则可以将其发送到主窗体,并使用新信息在网格上调用 Add.Row。这样您就不会为了重新绑定而对数据库进行回调。

【讨论】:

  • 我投票赞成,因为如果数据是大量数据并且性能是一个因素,这将是明智的。但是这种方法意味着添加额外的代码来从“添加”表单中读取值并手动添加行。这是简单性和性能之间的权衡。在采用这种方法之前,我会权衡性能优势与增加的复杂性,因为增加的复杂性意味着更多的错误机会(因为我们程序员是容易犯错误的人)。我的方法使代码更简单,但如果表单正在提取大量数据,则可能会出现性能问题。
  • 添加新项目时,会为其分配一个新的id。如果可能的话,我会尽量保持简单,所以我会尽量避免更多的复杂性,哈哈……但是,我会做我需要做的事情来让它工作
【解决方案2】:

假设这是 WinForms:

首先,调用“添加”窗口时,使用ShowDialog()而不是Show()

在带有 DataGrid 的主窗体中,代码如下所示

private void btnAdd_Click(Object sender, EventArgs e)
{
   DialogResult b =    frmAdd.ShowDialog();
   if(b == DialogResult.Ok)
   {
    // code to re-bind the grid here.
   }
}

在 frmAdd 表单中,您需要在更新数据库后让您的保存按钮将表单的 DialogResult 设置为 DialogResult.Ok。

我猜你所尝试的大致如下: 私人无效btnAdd_Click(对象发送者,EventArgs e) { frmAdd.ShowDialog(); // 在此处重新绑定网格的代码。 }

不同的是,使用 ShowDialog() 调用,主窗体将等到“添加”窗体关闭才能继续执行。在我的第二个代码示例中,仅使用 Show(),重新绑定网格的代码在显示“添加”表单后立即发生,在用户有机会更新数据之前。

(请注意,我是在脑海中编写的代码,而不是在 Visual Studio 中,所以它可能有错误)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2011-05-11
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多