我正在使用TADODataSet
(D7).
我没有使用我的DataSet在设计模式下创建持久字段.
dsItems.CommandText := 'select ID, ItemName, UserIDCreate from Items';
dsUsers.CommandText := 'select ID, LoginName from Users'; // lookup dataset
Run Code Online (Sandbox Code Playgroud)
如果我双击dsItems
并"添加所有文件",然后单击"新建文件"并定义我的查找字段,一切正常.结果dsItems
应包含:ID, ItemName, UserIDCreate, LoginName_Lookup
如何在设计时避免完成所有这些操作,并在打开DataSet之后(或不确定)之前添加查找字段.
换句话说:如何模拟"添加所有文件"然后"新建文件"以在运行时添加查找文件?
注意:
从IDE运行John的代码时出现异常.尝试打开DataSet时发生异常:EOleException with message 'An unknown error has occured'
.
function TCustomADODataSet.LocateRecord (ADODB.pas)
排队 if FieldCount = 1 then FLookupCursor.Find...
我接受答案,因为已编译的程序正在运行.
如果有人在IDE中运行表单时可以验证是否获得异常,那将是很好的.
我创建了一个内容类型TypeA,它具有基本ListB的查找字段.然后我创建一个使用TypeA的ListA.一切都是以编程方式创建的.
当ListA的'添加新项'模态应该加载时抛出异常.它只发生在ListB中有项目的情况下.如果ListB为空,则listA的'添加新项'模态加载,并且正确显示ListB的查找字段(None)
堆栈跟踪:
System.ArgumentException: Value does not fall within the expected range.
at Microsoft.SharePoint.SPFieldMap.GetColumnNumber(String strFieldName, Boolean bThrow)
at Microsoft.SharePoint.SPListItemCollection.GetColumnNumber(String groupName, Boolean bThrowException)
at Microsoft.SharePoint.SPListItemCollection.GetRawValue(String fieldname, Int32 iIndex, Boolean bThrow)
at Microsoft.SharePoint.SPListItem.GetValue(SPField fld, Int32 columnNumber, Boolean bRaw, Boolean bThrowException)
at Microsoft.SharePoint.SPListItem.GetValue(String strName, Boolean bThrowException)
at Microsoft.SharePoint.SPListItem.get_Item(String fieldName)
at Microsoft.SharePoint.WebControls.LookupField.get_DataSource()
at Microsoft.SharePoint.WebControls.LookupField.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at Microsoft.SharePoint.WebControls.BaseFieldControl.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive() …
Run Code Online (Sandbox Code Playgroud)