infopath 下拉列表框的有关问题

infopath 下拉列表框的问题
http://www.bizsupportonline.net/infopath2007/programmatically-fill-populate-drop-down-list-box-infopath-2007.htm
1。根据上面的东西,帮出来默认第一行显示空,这是为什么?

(先不管里面有没有自己加的空记录)
C# code


            DataTable dt1 = getDt(sql1);
            XPathNavigator DOM = DataSources["nextMan"].CreateNavigator();
            XPathNavigator group1 = DOM.SelectSingleNode("//options", NamespaceManager);
            XPathNavigator field1 = DOM.SelectSingleNode("//options/option", NamespaceManager);
            field1.SelectSingleNode("value").SetValue(dt1.Rows[0]["DoName"].ToString());
            field1.SelectSingleNode("displayname").SetValue(dt1.Rows[0]["Name"].ToString());
            //RemoveFirstItem();
            for (int i = 1; i < dt1.Rows.Count; i++)
            {
                AddItem(dt1.Rows[i]["DoName"].ToString().Trim(), dt1.Rows[i]["Name"].ToString().Trim());
            }

private void AddItem(string itemId, string itemName)
        {
            XPathNavigator DOM = DataSources["nextMan"].CreateNavigator();
            XPathNavigator group1 = DOM.SelectSingleNode("//options", NamespaceManager);
            XPathNavigator field1 = DOM.SelectSingleNode("//options/option", NamespaceManager);
            XPathNavigator newNode = field1.Clone();
            group1.AppendChild(newNode);
            newNode.SelectSingleNode("value").SetValue(itemId);
            newNode.SelectSingleNode("displayname").SetValue(itemName);
            

        }



2.然后如果我要获取当前值怎么获,我调试过了,我在FormEvents_Submit 里获当前列表的值时,获取的是第一项
这是为什么?

C# code

XPathNavigator DOM = DataSources["nextMan"].CreateNavigator();
            XPathNavigator group1 = DOM.SelectSingleNode("//options", NamespaceManager);
            XPathNavigator field1 = DOM.SelectSingleNode("//options/option", NamespaceManager);
            string x = field1.SelectSingleNode("value").Value.ToString().Trim();





------解决方案--------------------
1.因为你没有清理干净啊,原来有两行,你只删除了一行。应该全部删除,然后再添加:
C# code
XPathNavigator filteredRoot = DataSources["FilteredItems"].CreateNavigator().SelectSingleNode("//WorkItems", NamespaceManager);
XPathNodeIterator oldItems = filteredRoot.CreateNavigator().Select("WorkItem", NamespaceManager);
for (int i = oldItems.Count - 1; i >= 0; i--)
{
    XPathNavigator oldItem = DataSources["FilteredItems"].CreateNavigator().SelectSingleNode("//WorkItem[last()]", NamespaceManager);
    oldItem.DeleteSelf();
}

------解决方案--------------------
我也是遇到第一行是空行,不过我觉得这行还是有必要的,因为我可以选择空,infopath的Dropdownlist好像不能自己编辑吧,如果谁有这方面的资料请发给我 谢谢。

默认选中的话就要在初始的时候加个事件,用来setvalue Dropdownlist的 id
------解决方案--------------------
给你一段追加可重复节中的字段代码供参考:

 XPathNodeIterator iterator = domNav.Select("/my:Task1/my:group1/my:group2", NamespaceManager);
while (iterator.MoveNext())
{
XPathNavigator tempFileNode = iterator.Current;
XPathNavigator xpExcel = tempFileNode.SelectSingleNode("my:field01", NamespaceManager);
if (xpExcel.MoveToAttribute("nil", "http://www.w3.org/2001/XMLSchema-instance"))
{
xpExcel.DeleteSelf();
xpExcel.SetValue("XXXXX");