在InfoPath 2007中将数据动态加载到下拉列表框中的问题?

时间:2010-06-30 07:09:18

标签: infopath infopath-2007

我的InfoPath表单中有一个下拉列表,我根据下拉列表的选择加载了一些其他字段。所以我为下拉列表的“已更改”事件编写了如下代码。

public void ProjectName_Changed(object sender, XmlEventArgs e)
{
            string projectId = e.NewValue;
            dataQueryConnection = (AdoQueryConnection)this.DataConnections["ProjectInformation"];
            dataQueryConnection.Command = dataQueryConnection.Command + string.Format(" WHERE ProjectId = '{0}'",             projectId);
            dataQueryConnection.Execute();

}

我第一次更改下拉列表中的项目时工作正常,但对于项目的后续更改(第二次等等),会出现以下错误,

  

无法运行查询   跟随DataObject:   ProjectInformation InfoPath无法运行   指定的查询。   [0x80040E14] [Microsoft OLE DB提供程序   for SQL Server]附近的语法不正确   关键字'WHERE'。

这就是第二次

的原因
  

dataQueryConnection.Command =选择   “雇员”, “ACCOUNTNAME”, “项目名”, “专案编号”, “ProjectRole”, “BillableUtilization”, “CLIENTNAME”, “BillingCode”, “BUHead”   来自“TRF”。“hrt_vw_ProjectInformation”   as“hrt_vw_ProjectInformation”WHERE   ProjectId ='3072507'WHERE ProjectId   ='3076478'

每次使用先前执行的查询时,

后续事件触发WHERE子句。

我如何能够摆脱这个问题?

1 个答案:

答案 0 :(得分:0)

将初始命令字符串存储在代码中的全局变量中(在加载事件中)。然后在Changed函数中追加到全局变量而不是命令的前一个值。

string OrigString

public void FormEvents_Loading(object sender, LoadingEventArgs e)
{
   OrigString = dataQueryConnection.Command;
}

public void ProjectName_Changed(object sender, XmlEventArgs e) 
{ 
            string projectId = e.NewValue; 
            dataQueryConnection = (AdoQueryConnection)this.DataConnections["ProjectInformation"]; 
            dataQueryConnection.Command = OrigString + string.Format(" WHERE ProjectId = '{0}'",             projectId); 
            dataQueryConnection.Execute(); 

}