Заполнение поля с использованием нескольких значений поля - PullRequest
1 голос
/ 06 апреля 2011

Я использую InfoPath 2007 и пишу на C #.То, что я хочу сделать, это заполнить поле Номер контракта , с несколькими полями, равными Дата окончания периода контракта ( dtTo , которая должна иметь формат ГГГГ / ММ , который является выбранным средством выбора даты), Номер проекта ( ddlPortfolio , выбранный раскрывающийся список), Порядковый номер (который извлекается из базы данных, SQL Server 2005) и тип фонда ( bFundType , выбрана кнопка Option).

Теперь я использовал метод, чтобы попытаться заполнить поле Номер контракта.Этот метод называется Generate ContractNo, который выглядит так:

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 для заполнения поля порядкового номера порядковым номером из базы данных, который вызывает сохраненныйПроцедура называется, 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 #.

1 Ответ

0 голосов
/ 06 апреля 2011

Насколько я вижу, вам не нужно возвращаемое значение GenerateContractNo, поэтому у метода должен быть тип возврата void. Чтобы установить значение, попробуйте использовать этот код вместо:

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

Справочная информация:
Согласно документации для свойства Value , оно равно нулю для узлов элемента. Ваш узел sSequence, скорее всего, является узлом Элемента.

О вашем методе popSeq:

...