2016-06-12 4 views
0

현재 클라이언트가 InfoPath를 사용하여 양식을 만드는 것을 돕고 있으며 원하는대로 내 목록을 가져 오는 데 문제가 있습니다.InfoPath 목록 끝에 프로그래밍 방식으로 새 행 추가

목록 (반복 섹션)에 새 요소를 추가하면보기의 목록 맨 위에 새 요소가 추가되고 맨 아래에 추가되기를 원합니다. 고객은 사용자 지정 단추를 사용하여 요소 추가를 시작하고 InfoPath가 제공하는 "요소 추가"텍스트를 사용하지 않기를 원합니다.

enter image description here

사용자가 입력 필드에 뭔가 글을

, 나는 그것을 반복 섹션 목록에 추가 할 : 여기

더 내 문제를 설명하는 예입니다.

private XPathNavigator GetField(string xPath) 
{ 
    return MainDataSource.CreateNavigator() 
         .SelectSingleNode(xPath, NamespaceManager); 
} 

public void CTRL10_5_Clicked(object sender, ClickedEventArgs e) 
{ 
    string xPathToList = "/my:myFields/my:group5/my:group6/my:group7"; 
    string xPathToInput = "/my:myFields/my:group5/my:field2"; 
    string xPathToListElement = xPathToList + "/my:field3"; 

    //Creates a new row 
    XPathNavigator list = GetField(xPathToList); 
    XPathNavigator newRow = list.Clone(); 
    newRow.InsertAfter(list); 

    //Sets values on the new row 
    XPathNavigator input = GetField(xPathToInput); 
    XPathNavigator nameField = GetField(xPathToListElement); 
    nameField.SetValue(input.Value); 
    input.SetValue(""); 
} 

나는 그것이 목록이 아닌 하단의 상단에 추가되는리스트에 새로운 요소를 추가 .. enter image description here

어떤 제안 : 다음은 샘플 코드는?

답변

0

내가 만든 솔루션은 XPath 식의 목록에서 last ([last()]) 요소를 가져와 지정된 요소 뒤에 요소를 추가하는 것입니다.

private XPathNavigator GetField(string xPath) 
{ 
    return MainDataSource.CreateNavigator() 
          .SelectSingleNode(xPath, NamespaceManager); 
} 

public void CTRL10_5_Clicked(object sender, ClickedEventArgs e) 
{ 
    string xPathToList = "/my:myFields/my:group5/my:group6/my:group7[last()]"; 
    string xPathToInput = "/my:myFields/my:group5/my:field2"; 
    string xPathToListElement = xPathToList + "/my:field3"; 

    //Creates a new row 
    XPathNavigator list = GetField(xPathToList); 
    XPathNavigator newRow = list.Clone(); 
    newRow.InsertAfter(list); 

    //Sets values on the new row 
    XPathNavigator input = GetField(xPathToInput); 
    XPathNavigator nameField = GetField(xPathToListElement); 
    nameField.SetValue(input.Value); 
    input.SetValue(""); 
} 
0

는 붙박이 InfoPath는 "요소를 추가"와 같은 일을해야

CurrentView.ExecuteAction(ActionType.XCollectionInsert, "XmlToEdit");

를 사용해보십시오. "XmlToEdit"을 삽입하려는 그룹의 이름으로 바꾸십시오.

+0

답장을 보내 주셔서 감사합니다. InfoPath 2010에서 CurrentView 아래 ExecuteAction을 얻지 못했습니다. –

관련 문제