0

我一直在查看其他帖子以尝试解决问题,但我对 InfoPath 中的编码真的很陌生。我有一个代码应该允许我使用 Infopath 更新 SharePoint 列表中的项目。我不断收到“当前上下文中不存在名称“e”的错误消息。请帮忙!!

    public void InternalStartup()
    {
        ((ButtonEvent)EventManager.ControlEvents["UpdateList"]).Clicked += new ClickedEventHandler(UpdateList_Clicked("Update", e.Source.CreateNavigator()));
    }
    public void UpdateList_Clicked(string strOperation, XPathNavigator e)
    {
        //Create a new instance of our "Lists" web service
        ServerName.Lists myList = new ServerName.Lists();
        //Pass the logged on users credentials to the web service
        myList.Credentials = System.Net.CredentialCache.DefaultCredentials;
        //Create a DataSource object for our list data source
        DataSource dsContacts = this.DataSources["Updated Headcount"];
        //Create a NamespaceManager object so we can use the various namespaces on our XPATH expressions
        XmlNamespaceManager ns = this.NamespaceManager;
        //Create XPathNavigator objects for each field from our list
        XPathNavigator xnID = e.SelectSingleNode("@ID", ns);
        XPathNavigator xnTitle = e.SelectSingleNode("@Title", ns);
        XPathNavigator xnLastName = e.SelectSingleNode("@LastName ", ns);
        XPathNavigator xnFirstName = e.SelectSingleNode("@FirstName", ns);
        XPathNavigator xnFranchise = e.SelectSingleNode("@Franchise", ns);
        XPathNavigator xnLocation = e.SelectSingleNode("@Location", ns);
        XPathNavigator xnPillar = e.SelectSingleNode("@Pillar", ns);
        XPathNavigator xnLeader = e.SelectSingleNode("@Leader", ns);
        XPathNavigator xnActivity = e.SelectSingleNode("@Activity", ns);
        XPathNavigator xnCategory = e.SelectSingleNode("@Category", ns);
        XPathNavigator xnPosition = e.SelectSingleNode("@Position", ns);
        XPathNavigator xnDeptNumber = e.SelectSingleNode("@DeptNumber", ns);
        XPathNavigator xnSupervisor = e.SelectSingleNode("@Supervisor", ns);
        XPathNavigator xnEmployeeType = e.SelectSingleNode("@EmployeeType", ns);
        XPathNavigator xnFTE = e.SelectSingleNode("@FTE", ns);
        XPathNavigator xnNotes = e.SelectSingleNode("@Notes", ns);
        //Create a new XmlDocument to use for specifying the Update CAML query
        XmlDocument doc = new XmlDocument();
        //Create the needed update element
        System.Xml.XmlElement updates = doc.CreateElement("Batch");
        //Create the CAML query passing in the value of each of our fields from the form
        if (strOperation == "Delete")
        {
            updates.InnerXml = string.Format(@"<Method ID='1' Cmd='Delete'>" +
            "<Field Name='ID'>" + xnID.Value + "</Field>" + "</Method>");
        }
        else
        {
            //Create the CAML query passing in the value of each of our fields from the form
            updates.InnerXml = string.Format(@"<Method ID='1' Cmd='Update'>" +
            "<Field Name='ID'>" + xnID.Value + "</Field>" +
            "<Field Name='Title'>" + xnTitle.Value + "</Field>" +
            "<Field Name='LastName'>" + xnLastName.Value + "</Field>" +
            "<Field Name='FirstName'>" + xnFirstName.Value + "</Field>" +
            "<Field Name='Franchise'>" + xnFranchise.Value + "</Field>" +
            "<Field Name='Location'>" + xnLocation.Value + "</Field>" +
            "<Field Name='Pillar'>" + xnPillar.Value + "</Field>" +
            "<Field Name='Leader'>" + xnLeader.Value + "</Field>" +
            "<Field Name='Activity>" + xnActivity.Value + "</Field>" +
            "<Field Name='Category'>" + xnCategory.Value + "</Field>" +
            "<Field Name='Position>" + xnPosition.Value + "</Field>" +
            "<Field Name='DeptNumber'>" + xnDeptNumber.Value + "</Field>" +
            "<Field Name='Supervisor'>" + xnSupervisor.Value + "</Field>" +
            "<Field Name='EmployeeType'>" + xnEmployeeType.Value + "</Field>" +
            "<Field Name='FTE'>" + xnFTE.Value + "</Field>" +
            "<Field Name='Notes'>" + xnNotes.Value + "</Field>" + "</Method>");
        }
        //Update the list
        XPathNavigator xnListGUID = this.MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:ListName", ns);
        XmlNode node = myList.UpdateListItems(xnListGUID.Value, updates);
        //Requery the data source to reflect the updates
        dsContacts.QueryConnection.Execute();      
    }

}

}

4

2 回答 2

0

假设Clicked是一个带有void (string, XPathNavigator)签名的事件,您应该以这种方式添加事件处理程序:

public void InternalStartup()
{
    ((ButtonEvent)EventManager.ControlEvents["UpdateList"]).Clicked += UpdateList_Clicked;
}
于 2013-10-23T20:22:05.517 回答
0

你的意思

public void InternalStartup()
{
    ((ButtonEvent)EventManager.ControlEvents["UpdateList"]).Clicked +=
      (s, e) => UpdateList_Clicked("Update", e.Source.CreateNavigator());
}
于 2013-10-23T20:23:48.433 回答