2013-08-20 80 views
11

Tôi đang làm việc trên một dự án mà tôi có một biểu mẫu mà qua đó tôi có thể chỉnh sửa câu hỏi có sẵn trong chế độ xem danh sách. Bất cứ khi nào tôi chọn một hàng từ chế độ xem danh sách và nhấp vào nút 'sửa đổi', các hộp văn bản phía trên chế độ xem danh sách sẽ tải câu hỏi và các tùy chọn của nó. Điều này có nghĩa là khi tôi chọn một hàng trong chế độ xem danh sách và nhấp vào nút 'sửa đổi', câu hỏi sẽ tải chính nó vào các hộp văn bản. Tôi chỉnh sửa câu hỏi ở đó và nhấp vào 'lưu' để lưu thay đổi, nhưng tôi không thể truy cập dữ liệu trong các hộp văn bản. Nó nói {"Input string was not in a correct format."}."Chuỗi đầu vào không đúng định dạng."

Mã của tôi có dạng nút frmFormWizard 's 'chỉnh sửa' được đưa ra dưới đây:

frmFormWizard.cs Code:

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(); 
      } 
     } 

Bất cứ khi nào tôi cố gắng để biên dịch mã nó nói "{"Input string was not in a correct format."}" và điều này lỗi được hiển thị trên dòng sau:

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

Vui lòng cho tôi biết tôi đang làm gì sai.

+16

KHÔNG SỬ DỤNG nối chuỗi để tạo ra câu lệnh SQL của bạn sử dụng các thông số, nếu không bạn để nó mở cửa cho SQL injection. – Lloyd

+1

Giá trị thời gian chạy của lvTwoOrMoreOptions.SelectedItems [0] .Text.ToString() là gì? Ngoài ra, không nên "Văn bản" đã là một chuỗi, làm cho .ToString() dư thừa? – ZombieSheep

+1

Điều gì @Lloyd nói là đúng: http://xkcd.com/327/ – Nolonar

Trả lời

5

Dường như một số không gian có trong văn bản. Sử dụng

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

và chuyển đổi sang int32.

hy vọng mã này sẽ giải quyết bạn

Từ ý kiến ​​

nếu ListView của bạn đang ở chế độ báo cáo (tức là nó trông giống như một lưới) sau đó bạn sẽ cần tài sản subitems. lvTwoOrMoreOptions.SelectedItems đưa bạn từng mục trong chế độ xem danh sách - Các mục con sẽ đưa bạn các cột. Vì vậy, lvTwoOrMoreOptions.SelectedItems[0].SubItems[0] là giá trị cột đầu tiên,

+0

vẫn không hoạt động cùng một lỗi: ( –

+0

@Ayesha Noor: Giá trị thời gian chạy của lvTwoOrMoreOptions.SelectedItems [0] .Text.ToString() – Sumeshk

+2

@Ayesha Noor: nếu ListView của bạn ở chế độ báo cáo (tức là nó trông giống như một lvTwoOrMoreOptions.SelectedItems đưa bạn mỗi mục trong khung nhìn danh sách - SubItems đưa bạn các cột. Vì vậy, lvTwoOrMoreOptions.SelectedItems [0] .SubItems [0] là giá trị cột đầu tiên, hãy thử điều này. vấn đề của bạn đã được giải quyết, hãy đánh dấu câu trả lời của tôi là giải pháp – Sumeshk

0

Có vẻ rằng bất cứ văn bản được chứa một số ký tự mà không thể được chuyển đổi sang số nguyên như không gian, chữ cái, ký tự đặc biệt vv Kiểm tra những gì đang đến qua thả xuống như sau

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

và thấy rằng nếu là trường hợp.

1

Vui lòng thay đổi mã của bạn như dưới đây.

int QuestionID; 

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

    if (IsIntValue) 
    { 
     // YOUR CODE HERE 
    } 

Hy vọng tôi sẽ trợ giúp.

1

bất cứ khi nào tôi cố gắng để biên dịch mã nó nói "{" chuỗi đầu vào không phải là trong một định dạng chính xác. "}"

Lỗi này sẽ không đến về biên dịch.

Hiện tại, lỗi do bạn đang cố gắng phân tích chuỗi không hợp lệ thành số nguyên.Để làm điều đó một cách an toàn, bạn nên làm điều đó như thế này

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

bằng cách sử dụng nó, nó chỉ ra khỏi vòng lặp và không làm bất cứ điều gì .... –

+0

@AyeshaNoor là của bạn vấn đề được giải quyết? – Ehsan

+0

nop, chưa, tôi vẫn bị kẹt trong đó :( –

0

Bạn có thể cố gắng để truy cập vào một điều khiển bên trong một điều khiển, có thể một GridView hoặc DetailsView.

Hãy thử sử dụng một cái gì đó như thế này:

empsalary = Convert.ToInt32(((TextBox)DetailsView1.Rows[1].Cells[1].Controls[0]).Text); 
Các vấn đề liên quan