C# “输入字符串的格式不正确。”

C# “输入字符串的格式不正确。”,c#,.net,winforms,visual-studio-2010,C#,.net,Winforms,Visual Studio 2010,我正在做一个项目,在这个项目中,我有一个表单,通过它我可以编辑列表视图中可用的问题。每当我从列表视图中选择一行并单击“修改”按钮时,列表视图上方的文本框将加载问题及其选项。 这意味着,当我在列表视图中选择一行并单击“修改”按钮时,问题会自动加载到文本框中。我在那里编辑问题并单击“保存”保存更改,但我无法访问文本框中的数据。它说{输入字符串的格式不正确。} 我的frmFormWizard表单“编辑”按钮代码如下所示: frmFormWizard.cs代码: 每当我试图编译代码时,它都会说{Inpu

我正在做一个项目,在这个项目中,我有一个表单,通过它我可以编辑列表视图中可用的问题。每当我从列表视图中选择一行并单击“修改”按钮时,列表视图上方的文本框将加载问题及其选项。 这意味着,当我在列表视图中选择一行并单击“修改”按钮时,问题会自动加载到文本框中。我在那里编辑问题并单击“保存”保存更改,但我无法访问文本框中的数据。它说{输入字符串的格式不正确。}

我的frmFormWizard表单“编辑”按钮代码如下所示:

frmFormWizard.cs代码:

每当我试图编译代码时,它都会说{Input string的格式不正确。},下面一行显示了这个错误:

 QuestionID = Convert.ToInt32(lvTwoOrMoreOptions.SelectedItems[0].Text.ToString());

请让我知道我做错了什么。

看起来,无论文本包含哪些无法转换为整数的字符,如空格、字母、特殊字符等。请检查下拉列表中显示的内容,如下所示

LVTwo或MoreOptions.SelectedItems[0].Text.ToString


看看情况是否如此

请按以下方式更改代码

  int QuestionID;

  bool IsIntValue = Int32.TryParse("YOUR-VARIABLE", out QuestionID);

  if (IsIntValue)
  {
      // YOUR CODE HERE  
  }

希望我能有所帮助。

文本中似乎包含了一些空格。 使用

LVTwo或MoreOptions。选择EditEMS[0]。Text.ToString.Trim

并转换为int32

希望这段代码能解决你的问题

根据评论

如果ListView处于报告模式,即它看起来像一个网格,则需要SubItems属性。LVTworMoreOptions.SelectedItems获取列表视图中的每个项目-SubItems获取列。因此,LVTworMoreOptions.SelectedItems[0]。子项[0]是第一列值

每当我试图编译代码时,它都会说{输入字符串的格式不正确。}

编译时不会出现此错误

现在出现错误,因为您试图将无效字符串解析为整数。为了安全起见,你应该这样做

int questionID;
if(int.TryParse(vTwoOrMoreOptions.SelectedItems[0].Text.ToString(),out questionID))
{
//success code
}
else
{
 //failure code
}

您可能试图访问控件中的控件,可能是GridView或DetailsView

尝试使用类似以下内容:

empsalary = Convert.ToInt32(((TextBox)DetailsView1.Rows[1].Cells[1].Controls[0]).Text);

不要使用字符串连接来生成SQL语句使用参数,否则将对SQL注入保持打开状态。LVTworMoreOptions的运行时值是多少。SelectedItems[0]。Text.ToString?另外,文本不应该已经是字符串了,这使得.ToString变得多余吗?@Lloyd说的是真的:@Nolonar这与C、字符串连接和参数有什么关系?@Default它与C无关,它与SQL有关。因为SQL语句是字符串,所以可以通过在需要变量的地方编写有效的SQL语句,将命令注入SQL。当您连接字符串以生成SQL语句时,用户可能会滥用此功能,如漫画中所述。这基本上就是来自xkcd的劳埃德和兰德尔·门罗想要传达的。当然,您可以连接字符串,但仍然可以避免SQL注入,但使用参数而不是连接是最简单的方法。@Ayesha Noor:lvTwoOrMoreOptions的运行时值是多少。SelectedItems[0]文本ToString@AyeshaNoor:如果您的ListView处于报告模式,即它看起来像一个网格,那么您将需要SubItems属性。LVTworMoreOptions.SelectedItems获取列表视图中的每个项目-SubItems获取列。因此,LVTworMoreOptions.SelectedItems[0]。子项[0]是第一列值,请尝试此操作。如果您的问题已解决,请将我的答案标记为解决方案
empsalary = Convert.ToInt32(((TextBox)DetailsView1.Rows[1].Cells[1].Controls[0]).Text);