none
使用inforpath 2007 开发表单的代码问题 RRS feed

  • 问题

  • 在inforpath表单放入2个下拉列表控件,一个绑定的数据源 /dfs:myFields/dfs:dataFields/dfs:goyishaxx/@goyishmc  其中goyishmc是我在MOSS 2007上建的自定义列表;另一个绑定的数据源 /my:myFields/my:gysxx/my:source1   其中gysxx(组)、source1(组下面的重复域)是在inforpath设计时候自定义的数据源。我要实现的是这2个下拉列表框的级联。写的代码如下:

    using Microsoft.Office.InfoPath;
    using System;
    using System.Windows.Forms;
    using System.Xml;
    using System.Xml.XPath;
    using mshtml;

    namespace gysxx
    {
        public partial class FormCode
        {
            //string goyishaa="";
            // 启用浏览器功能的表单不支持成员变量。
            // 请使用代码从 FormState 词典
            // 写入和读取这些值,如下所示:
            //
            // private object _memberVariable
            // {
            //     get
            //     {
            //         return FormState["_memberVariable"];
            //     }
            //     set
            //     {
            //         FormState["_memberVariable"] = value;
            //     }
            // }

            // 注意: 以下是 Microsoft Office InfoPath 所需的过程。
            // 可以使用 Microsoft Office InfoPath 对其进行修改。
            public void InternalStartup()
            {
                EventManager.XmlEvents["/my:myFields/my:gysxx/@my:gysmc"].Changed += new XmlChangedEventHandler(gysmc_attr_Changed);
                      }

            public void gysmc_attr_Changed(object sender, XmlEventArgs e)
            {
                // 在此处编写代码,用于更改主数据源。
                XPathNavigator parent = e.Site.SelectSingleNode("..");

                // 清空Source1域的值
                XPathNodeIterator items = parent.Select("my:source1", NamespaceManager);
                while (items.Count != 0)
                {
                    parent.SelectSingleNode("my:source1", NamespaceManager).DeleteSelf();
                    items = parent.Select("my:source1", NamespaceManager);
                }

                //记录供应商名称,以便3级列表使用
                //this.goyishaa = e.NewValue.ToString().Trim();

                string matchingcitysXPath = String.Format(
                    "/dfs:myFields/dfs:dataFields/dfs:goyishaxx[@goyishmc = '{0}']", e.NewValue);

                // 获得符合条件的节点集合,逐一添加到Source1域中

                foreach (XPathNavigator Navigator in this.DataSources["goyishaxx"].CreateNavigator().Select(
                    matchingcitysXPath, NamespaceManager))
                {
                    using (XmlWriter writer = parent.AppendChild())
                    {
                        writer.WriteElementString("source1", NamespaceManager.LookupNamespace("my"),
                            Navigator.GetAttribute("kahuyiha", "").Trim());
                    }
                    MessageBox.Show(Navigator.GetAttribute("kahuyiha", ""));
                  
                }

            }

    要实现的第一个控件选择供应商名称后,第2个控件显示该供应商的相关开户银行。以上代码编译没有问题,但是在运行的时候,MessageBox.Show(Navigator.GetAttribute("kahuyiha", ""));
    可以show出来信息,但是信息没有写入到source1里,也就没办法读取出来。第2个下拉列表是空的!

    请大家帮助我看下代码是否存在异常。在这先谢谢各位大虾了。

     

    2011年5月22日 6:25