我有一个大型数据集,在页面加载时使用填充方法加载。
然后,可以将记录添加到数据集中。
所有这些都可以正常工作,但我可以让 bindingsource 识别新记录的唯一方法是执行填充方法。这也有效,但存在性能问题。为什么绑定源看不到数据集中的新记录?
主窗体代码。效果很好。
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();
失败!bindingsource 不会找到新记录,在找到时返回 -1 并默认为数据集中的第一条记录。
如果我将 .fill 方法放在对话框和主页之间,那么一切正常,但需要很长时间才能完成填充……七八秒。
我想我对绑定源的理解是无效的,我假设如果基础数据集被更新,那么绑定源会看到它。
因此,首先,如果有人对如何在没有填充的情况下刷新绑定源有建议,我将不胜感激,如果有人能解释为什么它会以这种方式工作,我可能会找到一种解决方法。
谢谢