Msgstr "Входная строка не в правильном формате".

Я работаю над проектом, в котором у меня есть форма, через которую я могу редактировать вопрос, доступный в виде списка. Всякий раз, когда я выбираю строку из списка и нажимаю кнопку "изменить", текстовые поля над списком загружают вопрос и его параметры. Это означает, что, когда я выбираю строку в виде списка и нажимаю кнопку "изменить", вопрос загружается в текстовые поля. Я редактирую вопрос там и нажимаю на "сохранить", чтобы сохранить изменения, но я не могу получить доступ к данным в текстовых полях. Он говорит {"Input string was not in a correct format."}.

Ниже приведен код моей формы frmFormWizard 'edit':

Код 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());

Пожалуйста, дайте мне знать, что я делаю неправильно.

Ответ 1

Похоже, какое-то пространство содержится в тексте. Используйте

lvTwoOrMoreOptions.SelectedItems [0].Text.ToString(). Обрежьте()

и конвертировать в int32.

надеюсь, что этот код решит вас.

Из комментариев

если ваш ListView находится в режиме отчета (т.е. он выглядит как сетка), тогда вам понадобится свойство SubItems. lvTwoOrMoreOptions.SelectedItems получает все элементы в представлении списка - SubItems получает столбцы. Итак, lvTwoOrMoreOptions.SelectedItems[0].SubItems[0] - это первое значение столбца,

Ответ 2

Измените свой код, как показано ниже.

  int QuestionID;

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

  if (IsIntValue)
  {
      // YOUR CODE HERE  
  }

Надеюсь, что я помогу.

Ответ 3

всякий раз, когда я пытаюсь скомпилировать код, который он говорит: "{" Строка ввода не была в правильном формате ".}"

Эта ошибка не возникает при компиляции.

Теперь ошибка comese, потому что вы пытаетесь разобрать недопустимую строку для целого. Чтобы сделать это безопасным образом, вы должны сделать это так:

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

Ответ 4

Похоже, что любой текст содержит некоторые символы, которые нельзя преобразовать в целое число, например пробел, буквы, специальные символы и т.д. Проверьте, что происходит при выпадающем меню ниже

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

и посмотрим, так ли это.

Ответ 5

Возможно, вы пытаетесь получить доступ к элементу управления внутри элемента управления, возможно, к GridView или DetailsView.

Попробуйте использовать что-то вроде этого:

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