leonidasvijay Ответов: 3

Выбранное значение комбобокса всегда показывает система.данных.объекта datarowview


Привет,

Я использую combobox в приложении моего окна.
А combobox привязывается к источнику данных с помощью valuemember и displaymember.
и на selectedindexchenged комбобокса я стараюсь, чтобы заполнить мое практическое руководство.
и я делаю это через combobox.selectedvalue.

Но я всегда получал ошибку, что тип данных недопустим для логической операции.
[Тип данных(если известен)=int,тип данных(если известен)=nvarchar]

и мой datagridview не заполняется.

private void Form_Load(object sender, EventArgs e)
        {
            try
            {
                label3.Visible = false;
                label4.Visible = false;
                string connstring = Properties.Settings.Default.TestDBConnectionString;
                con = new SqlCeConnection(connstring);
                con.Open();
                getallsubject();
                //getallunit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }



private void getallsubject()
        {
            try
            {
                da = new SqlCeDataAdapter("select SubjectId,SubjectName from Subject", con);
                DataTable dt = new DataTable();
                da.Fill(dt);
                if (dt != null)
                {
                    comboBoxsubject.DataSource = dt;
                    comboBoxsubject.ValueMember = dt.Columns[0].ToString();
                    comboBoxsubject.DisplayMember = dt.Columns[1].ToString();
                    //DataRow dr=dt.Rows[0];
                    //listBox1.DataSource = dt;
                    //listBox1.DisplayMember = dt.Columns[1].ToString();
                    //listBox1.ValueMember = dt.Columns[0].ToString();
                }
                else
                {
                    MessageBox.Show("No subject to add unit.Before proceed add subjects.");
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


private void comboBoxsubject_SelectedValueChanged(object sender, EventArgs e)
       {

              getallunit();

       }



private void getallunit()
       {
           try
           {
               if (comboBoxsubject.SelectedValue!="0")
               {
                   da = new SqlCeDataAdapter("select u.UnitId,u.UnitName,s.SubjectName from SubjectUnit u,Subject s where u.SubjectId=s.SubjectId and u.SubjectId='" +comboBoxsubject.SelectedValue + "'", con);
                   DataTable dt = new DataTable();
                   da.Fill(dt);
                   if (dt != null)
                   {
                       dataGridViewunit.DataSource = dt;
                   }
                   else
                   {
                       MessageBox.Show("No units has been added yet.");
                   }


               }
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
       }

3 Ответов

Рейтинг:
22

Prerak Patel

Я бы посоветовал вам изменить порядок

comboBoxsubject.ValueMember = dt.Columns[0].ToString();
comboBoxsubject.DisplayMember = dt.Columns[1].ToString();
comboBoxsubject.DataSource = dt;


leonidasvijay

Спасибо Бадди.
Теперь он работает.

Prerak Patel

Добро пожаловать. Теперь вы должны отметить это как ответ.

mosaddag

спасибо
его работа прекрасна

Paul.Mason.CB

Работал на меня!

Рейтинг:
2

Yiannis Leoussis

У меня была та же проблема, и я попытался

dt.Columns[0].ToString();
и это прекрасно сработало! После некоторой проверки я пришел к выводу, что эта проблема связана с региональными настройками, так как она работает везде, кроме одного клиента, который имеет разные региональные настройки (Турция в моем случае).


Рейтинг:
1

Syed Salman Raza Zaidi

Попробуйте сделать это в своем адаптере данных

da = new SqlCeDataAdapter("select u.UnitId,u.UnitName,s.SubjectName from SubjectUnit u,Subject s where u.SubjectId=s.SubjectId and s.SubjectId='" +comboBoxsubject.SelectedValue + "'", con)

OR

da = new SqlCeDataAdapter("select u.UnitId,u.UnitName,s.SubjectName from SubjectUnit u,Subject s where s.SubjectId='" +comboBoxsubject.SelectedValue + "'", con);

;