2011-04-06 3 views
1

InfoPath 2007을 사용하고 있고 C#으로 코딩하고 있습니다. 내가 뭘 원하는 계약 기간 종료 날짜 (있는 여러 필드와 필드 계약 번호을, 채우는입니다 형식 YYYY에서 선정 된 날짜 선택기입니다/MM, 수있다 dtTo,), 데이터베이스에서 검색되는 프로젝트 번호 (ddlPortfolio 선택 드롭 다운 목록), 시퀀스 번호 (SQL 서버 2005)과 기금 형 (bFundType, 선택 옵션 버튼).여러 필드 값을 사용하여 필드 채우기

이제 계약 번호 필드를 채우는 데 메서드를 사용했습니다.

public string GenerateContractNo() 
    { 
     string sSequence = ""; 

     //IPCode.popSeq(this.CreateNavigator(), this.NamespaceManager, DataSources, this.MainDataSource); 


     //string seqNo = this.CreateNavigator().SelectSingleNode("/my:myRoot/my:SectionHeading/my:sSequence", NamespaceManager).InnerXml; 



     string sPortfolio = this.CreateNavigator().SelectSingleNode("/my:myRoot/my:SectionHeading/my:ddlPortfolio", NamespaceManager).InnerXml; 
     string sYear = this.CreateNavigator().SelectSingleNode("/my:myRoot/my:SectionHeading/my:dtTo", NamespaceManager).InnerXml; 
     string sMonth = this.CreateNavigator().SelectSingleNode("/my:myRoot/my:SectionHeading/my:dtTo", NamespaceManager).InnerXml; 
     //string sSeq = this.CreateNavigator().SelectSingleNode("/my:myRoot/my:SectionHeading/my:sSequence", NamespaceManager).InnerXml; 
     string sFundType = this.CreateNavigator().SelectSingleNode("/my:myRoot/my:SectionHeading/my:bFundType", NamespaceManager).InnerXml; 

     //Convert.ToInt16(sSeq); 

     // return sYear + "/" + sMonth + "/" + sPortfolio + "/" + sSeq + "/" + sFundType; 

     sSequence = sYear + "/" + sMonth + "/" + sPortfolio + "/" + sFundType; 

     this.CreateNavigator().SelectSingleNode("/my:myRoot/my:SectionHeading/my:sSequence", this.NamespaceManager).SetValue(sSequence); 

     //CourseDetails = dtSDate.ToLongDateString() + " - " + dtEDate.ToLongDateString() + " | " + sLocation + " | " + SDCategory; 

     //CourseDetailsFields = sTitle + "|" + dtSDate.ToLongDateString() + "|" + dtEDate.ToLongDateString() + "|" + sLocation + "|" + SDCategory; 

     //lstDetails.Add(CourseDetailsFields, CourseDetailsFields); 
     return null; 

    } 

나는 또한 시퀀스 번호 필드를 채울, PopSeq라는 클래스를 사용하려고했습니다라는 저장 프로 시저를 호출하는 데이터베이스에서 일련 번호 : 간다 ContractNo를 생성 호출되는 방법, , uspGetSeqNo.

static public int popSeq(XPathNavigator xnMyForm, XmlNamespaceManager ns, DataSourceCollection ds, DataSource mds) 
    { 

     try 
     { 

      SqlConnection conn = new SqlConnection(IPCode.defaultConnectionString); 
      SqlCommand command = new SqlCommand("[uspGetSeqNo]", conn); 

      conn.Open();    
      command.CommandType = CommandType.StoredProcedure; 

      //XPathNavigator domNav = mds.CreateNavigator(); 
      //string sVendor = domNav.SelectSingleNode("/my:myRoot/my:SectionHeading/my:ddlVendor", this.NamespaceManager).ToString(); 

      //command.Parameters.AddWithValue("@iSequence", s); 

      SqlDataReader myReader = command.ExecuteReader(); 



      while (myReader.Read()) 
      { 
       string iSequence = Convert.ToString(myReader.GetOrdinal("iSequence")); 
       //return Convert.ToInt16(sSeq);      
      } 
     } 
     catch (Exception ex) 
     { 
      throw ex; 

     } 
     return 0; 
    } 

저장 프로 시저 :

USE [TAU_PANEL] 
GO 
/****** Object: StoredProcedure [dbo].[uspGetSeqNo] Script Date: 04/06/2011  08:52:14 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 


ALTER PROCEDURE [dbo].[uspGetSeqNo] 

AS 

SELECT  MAX(iSequence) + 1 AS seq 
FROM   dbo.ResAllocations 

그래서 내 문제는 버튼을 저장, 즉,이 계약 번호 필드를 채우지 않습니다 다음은뿐만 아니라 저장 프로 시저의 클래스 . 죄송합니다 나는 C#을 초보자입니다.

답변

0

지금까지 보았 듯이 반환 값은 GenerateContractNo 일 필요가 없으므로 반환 방법은 void이어야합니다. 값을 설정하려면, 대신에이 코드를 사용해보십시오 :

this.CreateNavigator(). 
    SelectSingleNode("/my:myRoot/my:SectionHeading/my:sSequence", 
     this.NamespaceManager).InnerText = sSequence; 

배경 :
Value property에 대한 설명서에 따르면, 요소 노드에 대한 null입니다. 귀하의 sSequence 노드는 요소 노드입니다.

  • throw ex으로 예외를 다시 발생하지 말라 : 당신의 방법 popSeq 소개

    . 자세한 내용은 다음 질문을 참조하십시오 : what can lead throw to reset a callstack (I'm using "throw", not "throw ex"). 당신이 그들을 처리하지 않는 경우

  • 이 (rethrowing이 처리로 계산하지 않습니다!), 예외를 포착하지 마십시오 가이드에 대한
+0

덕분에,이 ... 그렇게 할 것 – Martin