2013-08-20 151 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);