[Infopath 2007] 如何在 Form Service 使用下拉式清單,過濾內容 / How to Use DropDwon List Filter Content in Form Service

[Infopath 2007] 如何在 Form Service 使用下拉式清單,過濾內容 / How to Use DropDwon List Filter Content in Form Service

很不幸的,在Form Service下,不支援下拉式選單過濾,我只能透過程式的方式來達成過濾功能,今天我將利用Sharepoint清單當作後端資料庫,利用Infopath既有的功能再搭配程式碼,以減少開發時間,Infopath在處理Sharepoint清單相當方便,還不熟的人可以前往M$的教學網站,http://office.microsoft.com/zh-tw/infopath/HP100931601028.aspx

Step1.首先準備兩個Sharepoint清單(Cities、CityDistrict),清單內容如下

2009-12-21 下午 11-54-05_thumb[4]

2009-12-21 下午 11-52-28_thumb[4]

Step2.在Infopath裡準備欄位如下

2009-12-21 下午 10-48-46_thumb[3]

Step3.連線到Sharepoint清單(CityDistrict)

2009-12-21 下午 10-54-10_thumb[4]

Step3.設定City欄位為下拉式選單,資料來源為Cities,並指定City欄位

2009-12-21 下午 11-56-10_thumb[4]

Step4.設定District欄位為下拉式清單,資料來源為表單來源,並指定Districts欄位

2009-12-21 下午 11-36-05_thumb[4]

Step5.在City事件中加入以下程式碼

{
    if (e.Site.Value == "")
        return;
    //取得parent路徑
    XPathNavigator ParentXPath = e.Site.SelectSingleNode("..");
    //建立XPathNavigator集合
    List<XPathNavigator> Nodes = new List<XPathNavigator>();
    //複製資料格式
    foreach (XPathNavigator node in ParentXPath.Select("my:Districts", NamespaceManager))
    {
        Nodes.Add(node.Clone());
    }
    //刪除資料
    foreach (XPathNavigator node in Nodes)
    {
        node.DeleteSelf();
    }
    //定義過濾字串
    string MatchRoleXPath = String.Format("/dfs:myFields/dfs:dataFields/dfs:CityDistrict[@Cities = '{0}']", e.Site.Value);
    //定義資料庫連線
    XPathNavigator SubData = DataSources["CityDistrict"].CreateNavigator();
    XPathNodeIterator SubDataReTable = SubData.Select(MatchRoleXPath, this.NamespaceManager);
    foreach (XPathNavigator SelectedNode in SubDataReTable)
    {
        //取出過濾字串
        string value = SelectedNode.SelectSingleNode("@District").Value;
        //寫入資料
        using (XmlWriter writer = ParentXPath.AppendChild())
        {
            writer.WriteElementString("Districts", NamespaceManager.LookupNamespace("my"), value);
        }
    }
}

執行畫面如下

2009-12-22 上午 12-10-45_thumb

2009-12-22 上午 12-11-01_thumb

PS.本方法是利用表單內的重複表格(Districts),存放過濾後的資料,這是為了讓District欄位能夠展現出過濾後的結果。

操作畫面如下:

 

範例下載:DropDownFilter.rar

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo