C# 输入字符串的格式不正确
以下是我的代码,其中我将一列声明为私有字符串,并使用该值将该值绑定到网格,但在“PolicyRenewalGracePeriodDays”附近出现错误,输入字符串的格式不正确。请查看下面突出显示的文本,并告知我C# 输入字符串的格式不正确,c#,asp.net,infragistics,C#,Asp.net,Infragistics,以下是我的代码,其中我将一列声明为私有字符串,并使用该值将该值绑定到网格,但在“PolicyRenewalGracePeriodDays”附近出现错误,输入字符串的格式不正确。请查看下面突出显示的文本,并告知我 /// </summary> private const string COL_UNDERWRITER_DISPLAY_NAME = "UnderwriterDisplayName"; /// <summary> /// /// </summary>
/// </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);**
//
private const string COL\u unsecurer\u DISPLAY\u NAME=“unsecurer displayName”;
///
///
///
private const string COL_unsecurer_INITIALS=“unsecurer INITIALS”;
///
///
///
私有常量字符串COL\u UA\u DISPLAY\u NAME=“UADisplayName”;
///
///
///
私有常量字符串COL_UA_缩写=“UA”;
**private const string COL_RENEWAL_GRACE_PERIOD_DAYS=“PolicyRenewalGracePeriodDays”**
#端区
受保护的无效数据绑定(对象发送方、事件参数e)
{
foreach(此.grdAction.DisplayLayout.Rows中的UltraGridRow行)
{
模板柱;
单元格项目;
超链接docLink;
超链接;
超链接操作链接;
标签操作标签;
var policyClassId=Utility.GetCurrentPolicyClassId();
PolicyClass PolicyClass=Utility.GetCurrentPolicyClassEntity();
var accountId=(int)row.DataKey;
var insuredName=行.Cells.FromKey(列\u INSURED\u NAME\u HIDDEN).Text;
var referenceNumber=行.单元格.FromKey(列参考号).Text;
var statusId=int.Parse(row.Cells.FromKey(COL\u STATUS\u ID).Text);
var optionNames=string.Empty;
if(!string.IsNullOrEmpty(row.Cells.FromKey(COL\u OPTION\u NAMES.Text))
optionNames=row.Cells.FromKey(COL\u OPTION\u NAMES).Text;
var optionCount=int.Parse(row.Cells.FromKey(COL\u OPTION\u COUNT).Text);
var isVoidable=(row.Cells.FromKey(COL_可撤销)。Text=“1”);
布尔-拉格;
布尔多诺特伦夫拉格;
布尔有更新的参考编号;
var currentUser=(用户)会话[AppConstants.SK_CURRENT_User];
var expirationDate=DateTime.MinValue;
布尔转换旗;
var documentCount=int.Parse(row.Cells.FromKey(COL\u DOCUMENT\u COUNT).Text);
var allowadlayer=bool.Parse(row.Cells.FromKey(COL\u ALLOW\u ADD\u LAYER).Text);
var renewableLayers=row.Cells.FromKey(COL\u renewableLayers).Text;
int renewalGracePeriodDays=0;
**renewalGracePeriodDays=int.Parse(row.Cells.FromKey(COL\u RENEWAL\u GRACE\u PERIOD\u DAYS.Text)**
如果单元格不包含有效数字(例如空字符串),会发生什么情况?。您得到了问题中提到的例外情况。
一个简单的解决方法是使用该方法 来自MSDN文档 当此方法返回时,[第二个参数]包含32位带符号整数值 等于s[第一个参数]中包含的数字,如果转换成功, 或者,如果转换失败,则为零 参数为null、格式不正确或表示 小于MinValue或大于MaxValue的数字。此参数为 未初始化通过
我已经添加了粗体和方括号中的文本。因此,如果默认值为零,则不必对TryParse方法的结果进行任何测试。最有可能的是
row.Cells.FromKey(COL\u RENEWAL\u GRACE\u PERIOD\u DAYS).Text
没有返回您期望的结果。如果它的值不是0-9或大于int.MaxValue
的值,则会出现异常。此外null
或System.String.Empty
将导致异常
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
,它将返回一个bool,指示解析是否有效。如果有效,则传入的int将设置为传入的字符串
给出一些实际代码
if(!int.TryParse(row.Cells.FromKey(COL_RENEWAL_GRACE_PERIOD_DAYS).Text, out renewalGracePeriodDays))
renewalGracePeriod = MyDefaultValue;
除了上述答案之外,您还可以轻松创建一个小扩展方法来优雅地处理这些情况:
public static class ExtensionUtils
{
public static int ToZeroIfNotInt(this string valueToConvert)
{
int number =0;
int.TryParse(valueToConvert,out number);
return number;
}
}
然后这样称呼它:
renewalGracePeriodDays = row.Cells.FromKey(COL_RENEWAL_GRACE_PERIOD_DAYS).Text.ToZeroIfNotInt();
您正在检查的列可能是空字符串,或者包含非整数数据。我建议使用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。在处理用户输入时使用此方法是一个好主意,因为即使正确提示,也无法知道用户将输入什么…My guess
row.Cells.FromKey(COL\u RENEWAL\u grace\u period\u DAYS).Text
包含除0-9
:)以外的字符。您需要识别行.Cells.FromKey(COL\u RENEWAL\u GRACE\u PERIOD\u DAYS)的值。Text
在异常发生时。然后更新您的问题以包含该值。int.Parse(“thisIsNotAValidNumber”)
将引发与您看到的异常类似的异常。请检查文本字符串是什么。它可能为空或包含字母或其他内容。int.TryParse
不是下面答案中所述的解决方案。您应该考虑的问题是,为什么此字段包含无效字符。“PolicyRenewalGracePeriodDays”如何在网格中设置的列?您在该列上设置了哪些属性,以及您可能用于该列的任何编辑器?如果某些值真的0
有些值具有无效字符怎么办?@L.B.它仍将正确返回该值。如果无法解析该值,它只会将其默认为0
。您可能可以添加一个参数r到扩展方法,以选择除0以外的默认值。例如,您可能希望返回-1,以指示无效值…Icarus,假设该字段包含十六进制字符串形式的整数。您将为1a返回0,也为0返回0。真正的问题是OP为什么会收到此消息,而不是如何抑制它。Evan告诉我。r谢谢你的回复,我正在尝试使用co