Заполнение поля с использованием нескольких значений поля
Я использую InfoPath 2007 и пишу на C#. Я хочу заполнить поле Номер контракта несколькими полями, указав дату окончания периода контракта (dtTo, которая должна иметь формат YYYY / MM, который является выбранным датчиком), Номер проекта (ddlPortfolio, a выбранный раскрывающийся список), порядковый номер (который извлекается из базы данных, SQL Server 2005) и тип фонда (bFund Type, выбрана кнопка 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, чтобы заполнить поле Sequence Number порядковым номером из базы данных, который вызывает хранимую процедуру с именем 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 ответ
Насколько я вижу, вам не нужно возвращаемое значение GenerateContractNo
, поэтому сделайте так, чтобы метод имел возвращаемый тип void
, Чтобы установить значение, попробуйте использовать этот код:
this.CreateNavigator().
SelectSingleNode("/my:myRoot/my:SectionHeading/my:sSequence",
this.NamespaceManager).InnerText = sSequence;
Фон:
Согласно документации для Value
свойство, это ноль для узлов элемента. Ваш узел sSequence, скорее всего, является элементом Element.
О вашем методе popSeq
:
- Не выбрасывайте исключения с
throw ex
, См. Следующий вопрос для получения дополнительной информации: что может привести к выбрасыванию throw для сброса стека вызовов (я использую "throw", а не "throw ex"). - Не отлавливайте исключения, если вы не обрабатываете их (перебрасывание не считается обработкой!)