чтение значения члена из выпадающего списка, заполненного словарем - PullRequest
0 голосов
/ 12 октября 2018

Я заполнил combobox, используя dictionary для события form_load со значением и отображаемым элементом, как показано ниже

Dictionary<string, int> GravelCount = new Dictionary<string, int>
{
    {1,"text value 1"},
    {2,"text value 2"},
};

CB_GravelCount.DataSource = new BindingSource(GravelCount, null);
CB_GravelCount.DisplayMember = "Key";
CB_GravelCount.ValueMember = "Value";
CB_GravelCount.SelectedIndex = -1;

этот элемент значения сохраняется в базе данных сервера sql ... все работаетнормально, пока я не пытаюсь прочитать эти сохраненные данные и переназначить на combobox в случае form_load данным, которым будет присвоено значение, в поле со списком ничего не показано, так как он получает индекс -1 без ошибок

public int GetPersonification()
{
    string connStr = ConfigurationManager.ConnectionStrings["SRJDconnstr"].ToString();
    string cmdStr = @"SELECT ID,
                                             SIZ,
                                             PLACE,
                                             ONE_OR_MORE,
                                             R_OR_L,
                                             EKO_OR_ASH,
                                             NOTICE
                                     FROM PERSONIFICATION
                                   WHERE SEANCE_ID=@SEANCE_ID;";

    using (SqlConnection conn = new SqlConnection(connStr))
    using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
    {

            conn.Open();
            cmd.CommandText = cmdStr;
            cmd.CommandType = CommandType.Text;

            cmd.Parameters.Add(new SqlParameter("@SEANCE_ID", SqlDbType.Int)).Value = F0102.vSessionID;

            SqlDataReader sqlReader = cmd.ExecuteReader();

            while (sqlReader.Read())
            {
                PersonificationID = Convert.ToInt32(sqlReader[0].ToString());
                TB_Size.Text = sqlReader[1].ToString();                              //SIZ
                CB_TreatmentPlace.SelectedValue = sqlReader[2].ToString(); //PLACE
                CB_GravelCount.SelectedValue = sqlReader[3].ToString();      //ONE_OR_MORE
                CB_Side.SelectedValue = sqlReader[4].ToString();                 //R_OR_L
                CB_TreatmentWay.SelectedValue = sqlReader[5].ToString(); //EKO_OR_ASH
                TB_Note.Text = sqlReader[6].ToString();                             //NOTICE
            }
            return 1;
    }
}

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

разбирать на int.

CB_GravelCount.SelectedValue = int.Parse(sqlReader[3].ToString());

0 голосов
/ 12 октября 2018

Скорее всего, у вас ошибка при чтении из базы данных.Поместите try / catch вокруг части кода SqlDataReader, чтобы увидеть, что именно не работает.Я предполагаю, что у вас есть нулевое значение для одного из столбцов данных, что вызывает сбой ToString или сбой Convert.ToInt32 для PersonificationId.Чтение сообщения об исключении, которое возвращается, скорее всего, направит вас в правильном направлении.Попробуйте это:

public int GetPersonification()
{
  string connStr = ConfigurationManager.ConnectionStrings["SRJDconnstr"].ToString();
  string cmdStr = @"SELECT ID,
                          SIZ,
                        PLACE,
                  ONE_OR_MORE,
                        R_OR_L,
                    EKO_OR_ASH,
                        NOTICE
          FROM PERSONIFICATION
          WHERE SEANCE_ID=@SEANCE_ID;";

  using (SqlConnection conn = new SqlConnection(connStr))
  using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
  {
    //Add the try here
    try
    {
      conn.Open();
      cmd.CommandText = cmdStr;
      cmd.CommandType = CommandType.Text;

      cmd.Parameters.Add(new SqlParameter("@SEANCE_ID", SqlDbType.Int)).Value = F0102.vSessionID;

      SqlDataReader sqlReader = cmd.ExecuteReader();
      int? persId = null;
      string siz,
      string place = "";
      string one_or_more = "";
      string r_or_l = "";
      string eko_or_ash = "";
      string notice = "";
      while (sqlReader.Read())
      {
          persId = sqlReader["ID"] as int? ?? default(int);
          siz = sqlReader["SIZ"] as string;
          place = sqlReader["PLACE"] as string;
          one_or_more = sqlReader["ONE_OR_MORE"] as string;
          r_or_l = sqlReader["R_OR_L"] as string;
          eko_or_ash = sqlReader["EKO_OR_ASH"] as string;
          notice = sqlReader["NOTICE"] as string;
      }
      PersonificationID = persId ?? 0; //null coalesce
      TB_Size.Text = siz;
      CB_TreatmentPlace.SelectedValue = place;
      CB_GravelCount.SelectedValue = one_or_more;
      CB_Side.SelectedValue = r_or_l;
      CB_TreatmentWay.SelectedValue = eko_or_ash;
      TB_Note.Text = notice;
      return 1;
    }
    catch (Exception ex)
    {
      //Read the exception message using your debugger.
      return 0;
    }
  }
}
...