我有一个大型数据集,可以在页面加载时使用填充方法加载。
然后,可以将记录添加到数据集中。
所有这些都可以正常工作,但是我可以让bindingsource识别新记录的唯一方法是执行填充方法。这也有效,但是性能问题。为什么绑定源看不到数据集中的新记录?
Mainform Code。效果很好。
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;
SubForm代码。也很棒。
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();
FAIL! bindingsource找不到新记录,在find上返回-1,默认为数据集中的第一条记录。
如果我将.fill方法放在对话框和主页面之间,那么一切正常,但需要一段时间来填充...七八秒钟。
我想我对绑定源的理解是不正常的,我假设如果底层数据集已更新,那么绑定源就会看到它。
所以,首先,如果某人有关于如何刷新绑定源而没有填充的建议我会很感激,如果有人可以解释为什么这样做,我可以找到解决方法。
由于
答案 0 :(得分:0)
我对Bindingsource的理解是正确的,它看到了新记录的添加。问题是数据集从视图中获取其信息。 add new方法仅填充基表中的字段。其他字段(由View汇编的字段)不会填充,直到tableadapter使用fill方法重新读取。我没有看到除了填充新记录的每个字段之外的其他方法,最大的缺点是每当视图或视图中组装的任何表被更改时,您必须确保更改代码。相反,我会减少每次填充时加载的记录数。