如何在不使用 .fill 的情况下获取 Bindingsource 以查看使用 TableAdapter.Update(



我有一个大型数据集,在页面加载时用填充方法加载。

然后,可以将记录添加到数据集。

所有这些都工作正常,但是我可以让绑定源识别新记录的唯一方法是执行填充方法。 这也有效,但是一个性能问题。 为什么绑定源在数据集中看不到新记录?

麦吉德代码。效果很好。

         DialogResult returnFormVal;
        Schedulers.DataSets.SchedOneFetch.WOMainFetchRow newRow = schedOneFetch.WOMainFetch.NewWOMainFetchRow();
        Schedulers.Forms.NewWorkOrder genReport = new Schedulers.Forms.NewWorkOrder(ref newRow);
        Int32 picNumber;
        returnFormVal = genReport.ShowDialog();
        schedOneFetch.WOMainFetch.Rows.Add(newRow);
        wOMainFetchBindingSource.EndEdit();
        wOMainFetchTableAdapter.Adapter.Update(schedOneFetch.WOMainFetch);
        Int32 passBackVal = newRow.DISID;

子窗体代码。也很好用。

            passBackRow.DISDueDate = monthCalendar1.SelectionStart;
            passBackRow.DISID = 99999999;
            if (ckbEqpt.Checked == true & lbProcNum.Items.Count > 0)
            {
                passBackRow.DISEquip = Convert.ToInt32(lbProcNum.SelectedValue.ToString());
            }
            else
            {
                passBackRow.DISEquip = 0;
            }

            passBackRow.DISLineNumber = Convert.ToInt32(lbLineName.SelectedValue.ToString());
            passBackRow.DISManHours = Convert.ToInt32(nudEstTotTime.Value);
            passBackRow.DISNumberAss = Convert.ToInt32(nudEstTM.Value);
            passBackRow.DISOpenDate = DateTime.Now;
            passBackRow.DISOriginator = userID.DBUserID;
            passBackRow.DISRequestor = 0;
            passBackRow.DISResponsible = Convert.ToInt32(lbRespons.SelectedValue.ToString());
            passBackRow.DISType = Convert.ToInt32(lbType.SelectedValue.ToString());
            passBackRow.DISWorkAccomp = "";
            passBackRow.DISWorkRequired = rtbWorkReq.Text;
            passBackRow.MLID = 0;
            passBackRow.LIID = 0;
            passBackVal = 0;
            this.Close();

将控制权返回到主窗体。 新记录已添加到数据库中。

                wOMainFetchBindingSource.Position = wOMainFetchBindingSource.Find("DISID", passBackVal);

            DataRowView dtaRow = (DataRowView)wOMainFetchBindingSource.Current;
            String woID = dtaRow["DISID"].ToString();

失败! 绑定源将找不到新记录,在查找时返回 -1,并默认为数据集中的第一条记录。

如果我将 .fill 方法放在对话框和主页之间,那么一切正常,但需要很长时间才能完成填充......七八秒。

我想我对绑定源的理解是不起作用的,我假设如果基础数据集被更新,那么绑定源就会看到它。

因此,首先,如果有人

对如何在没有填充的情况下刷新绑定源有建议,我将不胜感激,如果有人可以解释为什么这样做,我可能会找到解决方法。

谢谢

我对绑定源的理解是正确的,它看到了新记录的添加。问题是数据集从视图中获取其信息。添加新方法仅填充基表中的字段。 其他字段(由 View 组合的字段)不会填充,直到表适配器使用 fill 方法重新读取。 除了填充新记录的每个字段之外,我看不到解决此问题的方法,最大的缺点是每当视图或视图中组装的任何表发生更改时,您都必须确保更改代码。 相反,我将减少每次填充时加载的记录数。

最新更新