web-dev-qa-db-ja.com

"入力文字列は、正しい形式ではありませんでした。"

リストビューで利用可能な質問を編集できるフォームがあるプロジェクトに取り組んでいます。リストビューから行を選択して[変更]ボタンをクリックすると、リストビューの上のテキストボックスに質問とそのオプションが読み込まれます。つまり、リストビューで行を選択して[変更]ボタンをクリックすると、質問がテキストボックスに読み込まれます。そこで質問を編集し、「保存」をクリックして変更を保存しますが、テキストボックスのデータにアクセスできません。 {"Input string was not in a correct format."}

フォームfrmFormWizardの「編集」ボタンのコードは以下のとおりです。

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

コードをコンパイルしようとするたびに、"{"Input string was not in a correct format."}"およびこのエラーは次の行に表示されます。

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

私が間違っていることを教えてください。

11
Ahsan Hussain

テキストにスペースが含まれているようです。つかいます

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

そしてint32に変換します。

このコードがあなたを解決することを願っています

コメントから

listViewがレポートモードの場合(つまり、グリッドのように見える場合)、SubItemsプロパティが必要になります。 lvTwoOrMoreOptions.SelectedItemsはリストビューの各アイテムを取得します-SubItemsは列を取得します。そう lvTwoOrMoreOptions.SelectedItems[0].SubItems[0]は最初の列の値です。

5
Sumeshk

コードをコンパイルしようとするたびに、「{"入力文字列が正しい形式ではありませんでした。」}

このエラーはコンパイル時に発生しません。

無効な文字列を整数に解析しようとしているため、エラーが発生します。安全に行うには、次のようにする必要があります

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

以下のようにコードを変更してください。

  int QuestionID;

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

  if (IsIntValue)
  {
      // YOUR CODE HERE  
  }

私が助けてくれることを願っています。

1
Ragesh S

そのテキストがスペース、文字、特殊文字などの整数に変換できないいくつかの文字を含んでいるように見えます。以下のようにドロップダウンから来るものを確認してください

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

そして、そうであるかどうかを確認します。

0
Kuzgun

コントロール、おそらくGridViewまたはDetailsView内のコントロールにアクセスしようとしている可能性があります。

次のようなものを使用してみてください。

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