2013-08-20 155 views
11

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

我的形式frmFormWizard的‘编辑’按钮的代码下面给出:

frmFormWizard.cs代码:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.Sql; 
using System.Data.SqlClient; 

namespace SurveyBuilder 
{ 
    public partial class frmFormWizard : Form 
    { 
     int intPanelNumber = 1; 
     Boolean blnCancel = false; 
     //int intFlag = 1; 

     public frmFormWizard() 
     { 
      InitializeComponent(); 
     } 

....................... 
....................... 
....................... 
....................... 


private void btnEditTwoOrMoreOptions_Click(object sender, EventArgs e) 
     { 

      int QuestionID;   
      string sql; 

      QuestionID = Convert.ToInt32(lvTwoOrMoreOptions.SelectedItems[0].Text.ToString()); 
      { 
       SqlConnection cn = new SqlConnection(); 
       SqlCommand rs = new SqlCommand(); 
       SqlDataReader sdr = null; 
       clsConnection clsCon = new clsConnection(); 


       clsCon.fnc_ConnectToDB(ref cn); 

       sql = ""; 
       sql += "SELECT * FROM SurveyQuestionLog WHERE SurveyQuestionLog.QuestionLogID = "+ QuestionID +""; 
       //sql += "SELECT * FROM SurveyQuestionLog"; 

       rs.Connection = cn; 
       rs.CommandText = sql; 
       sdr = rs.ExecuteReader(); 

       while (sdr.Read()) 
       { 
        txtTwoOrMoreQuestions.Text = (string)sdr["Question"]; 
        txtOption1.Text = (string)sdr["Choice1"]; 
        ...................................... 
        ...................................... 
        ...................................... 
       } 


       sdr.Close(); 
       rs = null; 
       cn.Close(); 
      } 
     } 

每当我试图编译代码,它说"{"Input string was not in a correct format."}"这错误显示在以下行上:

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

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

+16

不要使用字符串连接生成SQL语句中使用参数,否则你把它开到SQL注入。 – Lloyd

+1

什么是lvTwoOrMoreOptions.SelectedItems [0] .Text.ToString()的运行时间值?另外,不应该“文本”已经是一个字符串,使.ToString()多余? – ZombieSheep

+1

@Lloyd说的是对的:http://xkcd.com/327/ – Nolonar

回答

5

它看起来像文本中包含一些空间。 使用

lvTwoOrMoreOptions.SelectedItems [0] .Text.ToString()。修剪()

,并转换为INT32。

希望这个代码将解决你

从评论

如果你的ListView是在报告模式(即它看起来像一个网格),那么你就需要子项目属性。 lvTwoOrMoreOptions.SelectedItems让你在列表视图中的每个项目 - SubItems让你的列。所以lvTwoOrMoreOptions.SelectedItems[0].SubItems[0]是第一列值,

+0

仍然不工作相同的错误:( –

+0

@Ayesha Noor:什么是运行时间值lvTwoOrMoreOptions.SelectedItems [0] .Text.ToString() – Sumeshk

+2

@Ayesha否:如果您的ListView处于报告模式(即它看起来像一个然后你需要SubItems属性lvTwoOrMoreOptions.SelectedItems让你在列表视图中的每个项目 - SubItems让你得到列,所以lvTwoOrMoreOptions.SelectedItems [0] .SubItems [0]是第一列值,试试这个if你的问题解决请标记我的答案为解决方案 – Sumeshk

0

看来,无论是文本包含一些字符不能被转换为整数空格等字母,特殊字符等检查什么是通过下拉菜单来如下

lvTwoOrMoreOptions.SelectedItems[0].Text.ToString();

,看看是否有是这样的。

1

请更改您的代码,如下所示。

int QuestionID; 

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

    if (IsIntValue) 
    { 
     // YOUR CODE HERE 
    } 

希望我能帮上忙。

1

每当我试图编译代码它说:“{”输入字符串的不正确的格式。“}”

这个错误不会来在编译。

现在错误来了,因为你试图解析一个无效的字符串为整数。要做到这一点以安全的方式,你应该做这样的

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

通过使用它,它只是走出循环,不要做任何事情...... –

+0

@AyeshaNoor是你的问题解决了? – Ehsan

+0

nop,还没有,我仍然陷在它:( –

0

你可能会尝试访问控制的控制中,也许一个GridView或DetailsView控件。

尝试使用这样的事情:

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