2012-11-16 131 views
0

以下是我的代码,我声明一个列为私有字符串,我使用该值绑定到网格的值,但我得到的错误输入字符串不正确的格式近“PolicyRenewalGracePeriodDays” ..please看到高亮文本的下方,建议我请输入字符串格式不正确

/// </summary> 
private const string COL_UNDERWRITER_DISPLAY_NAME = "UnderwriterDisplayName"; 
/// <summary> 
/// 
/// </summary> 
private const string COL_UNDERWRITER_INITIALS = "UnderwriterInitials"; 
/// <summary> 
/// 
/// </summary> 
private const string COL_UA_DISPLAY_NAME = "UADisplayName"; 
/// <summary> 
/// 
/// </summary> 
private const string COL_UA_INITIALS = "UA"; 
**private const string COL_RENEWAL_GRACE_PERIOD_DAYS = "PolicyRenewalGracePeriodDays";** 
#endregion 


    protected void grdAction_DataBound(object sender, EventArgs e) 
     { 
      foreach (UltraGridRow row in this.grdAction.DisplayLayout.Rows) 
      { 
       TemplatedColumn col; 
       CellItem item; 
       HyperLink docLink; 
       HyperLink letterLink; 
       HyperLink actionLink; 
       Label actionLabel; 
       var policyClassId = Utility.GetCurrentPolicyClassId(); 
      PolicyClass policyClass = Utility.GetCurrentPolicyClassEntity(); 
       var accountId = (int) row.DataKey; 
       var insuredName = row.Cells.FromKey(COL_INSURED_NAME_HIDDEN).Text; 
       var referenceNumber = row.Cells.FromKey(COL_REFERENCE_NUMBER).Text; 
       var statusId = int.Parse(row.Cells.FromKey(COL_STATUS_ID).Text); 

       var optionNames = string.Empty; 
       if (!string.IsNullOrEmpty(row.Cells.FromKey(COL_OPTION_NAMES).Text)) 
        optionNames = row.Cells.FromKey(COL_OPTION_NAMES).Text; 

       var optionCount = int.Parse(row.Cells.FromKey(COL_OPTION_COUNT).Text); 
       var isVoidable = (row.Cells.FromKey(COL_IS_VOIDABLE).Text == "1"); 
       bool renewalFlag; 
       bool doNotRenewFlag; 
       bool hasRenewingReferenceNumber; 
       var currentUser = (User) Session[AppConstants.SK_CURRENT_USER]; 
       var expirationDate = DateTime.MinValue; 
       bool convertedFlag; 
       var documentCount = int.Parse(row.Cells.FromKey(COL_DOCUMENT_COUNT).Text); 
       var allowAddLayer = bool.Parse(row.Cells.FromKey(COL_ALLOW_ADD_LAYER).Text); 
       var renewableLayers = row.Cells.FromKey(COL_RENEWABLE_LAYERS).Text; 
       int renewalGracePeriodDays = 0; 

       **renewalGracePeriodDays = int.Parse(row.Cells.FromKey(COL_RENEWAL_GRACE_PERIOD_DAYS).Text);** 
+2

我的'row.Cells.FromKey(COL_RENEWAL_GRACE_PERIOD_DAYS).Text'包含字符,然后'0-9':) –

+1

您需要识别'row.Cells.FromKey(COL_RENEWAL_GRACE_PERIOD_DAYS)的值。文本'在发生异常时。然后更新您的问题以包含该值。 –

+1

'int.Parse(“thisIsNotAValidNumber”)'会抛出一个异常,就像你看到的那样。检查文本字符串是什么。它可能是空的或包含字母或其他东西。 –

回答

2

如果电池不包含有效数字(例如一个空字符串),会发生什么?
你会在你的问题中提到异常。
简单的解决方法是使用TryParse方法

int renewalGracePeriodDays; 
string temp = row.Cells.FromKey(COL_RENEWAL_GRACE_PERIOD_DAYS).Text; 
Int32.TryParse(temp, out renewalGracePeriodDays); 

从MSDN文档

此方法返回时,[第二个参数]包含32位带符号的整数值 等效到第[第一个参数]中包含的数字,如果转换成功,则 或如果转换失败则为零。如果s 参数为空,格式不正确,或者表示编号小于MinValue或大于MaxValue的 ,转换将失败。这个参数是 通过未初始化

粗体和正方形的文本已添加我。所以如果你的默认值应该是零,你不必对TryParse方法的结果做任何测试。

4

最有可能的row.Cells.FromKey(COL_RENEWAL_GRACE_PERIOD_DAYS).Text没有返回你所期望的。如果它不是0-9或值大于int.MaxValue,则会发生异常。此外,nullSystem.String.Empty将导致异常。

您可以使用TryParse代替它,它将返回一个布尔值,指示解析是否工作。如果它工作,你通过的int将被设置为你传递的字符串。

给一些实际的代码;

if(!int.TryParse(row.Cells.FromKey(COL_RENEWAL_GRACE_PERIOD_DAYS).Text, out renewalGracePeriodDays)) 
     renewalGracePeriod = MyDefaultValue; 
+0

感谢您的回复,我正尝试使用您提供给我的代码,并说它有一些无效的参数。任何想法? – user1567194

+0

@ user1567194我的一个变量名称是错误的。我只是修复它。想不到任何其他......这些是在msdn上指定的参数http://msdn.microsoft.com/en-us/library/f02979c7.aspx – evanmcdonnal

2

除了上述的回答,您可以轻松地创建一个小扩展方法来妥善地处理这些案件:

​​

然后调用它像这样:

renewalGracePeriodDays = row.Cells.FromKey(COL_RENEWAL_GRACE_PERIOD_DAYS).Text.ToZeroIfNotInt(); 
+0

如果某些值真的是'0',那么有些字符无效? –

+0

@ L.B。它仍会正确返回值。如果该值无法解析,它将简单地将其默认为“0”。您可能可以向扩展方法添加一个参数,以选择除0以外的默认值。例如,您可能想要返回-1,以指示无效值... – Icarus

+0

Icarus,假设该字段包含整数为十六进制字符串你会为1a返回0,0也为0。真正的问题是OP为什么得到这个消息,而不是它如何被抑制。 –

1

这是可能的您正在检查的列是一个空字符串,或者包含非整数数据。我建议使用TryParse方法。

int renewalGracePeriodDays; 
if (!int.TryParse(row.Cells.FromKey(COL_RENEWAL_GRACE_PERIOD_DAYS).Text), out renewalGracePeriodDays) 
{ 
    renewalGracePeriodDays = 0; 
    // Inside here, you can log the exception, alert the user, or end processing 
} 

如果失败的TryParse,你的宽限期将默认为0。这是一个与用户输入打交道时使用这个方法是一个好主意,因为有没有说什么人会进入,即使正确提示...

+0

埃文击败了我。大鼠。 – MadHenchbot