2013-06-11 4 views
2

У меня есть следующий код:ComboBox не заполняя с кодом

Using conn = New SqlConnection(connStr) 
     Dim sql = "SELECT [CATEGORIA], [AREA] FROM [CATEGORIAS] WHERE ([AREA] = @AREA)" 
     Dim sqlCmd = New SqlCommand(sql, conn) 
     sqlCmd.Parameters.AddWithValue("@AREA", CStr(PublicLogin.Area)) 

     conn.Open() 
     Dim ds As New DataSet 
     Dim da As New SqlDataAdapter(sql, conn) 
     da.Fill(ds, "CATEGORIAS") 

     With cboCat 
      .DataSource = ds.Tables("CATEGORIAS") 
      .DisplayMember = "CATEGORIAS_AREA" 
      .ValueMember = "CATEGORIAS_AREA" 
      .SelectedIndex = 0 
     End With 

    End Using 

Она должна теоретически заполнить право поля со списком? Это не так. Это не дает мне никаких ошибок или чего-то еще; поле со списком просто там пусто. Я уверен, что запрос работает хорошо, и он захватывает правильную информацию, но Combobox не заполняется. Если я возьму запрос, он заполнит CB «System.Data.Row ...»

ОБНОВЛЕНИЕ: Рабочий код на случай, если кому-то это понадобится;

 Using conn = New SqlConnection(connStr) 
     Dim sql = "SELECT [CATEGORIA], [AREA] FROM [CATEGORIAS] WHERE ([AREA] = @AREA)" 
     Dim sqlCmd = New SqlCommand(sql, conn) 
     sqlCmd.Parameters.AddWithValue("@AREA", CStr(PublicLogin.Area)) 

     conn.Open() 
     Dim ds As New DataSet 
     Dim da As New SqlDataAdapter(sqlCmd) 
     da.Fill(ds, "CATEGORIAS") 

     With cboCat 
      .DataSource = ds.Tables("CATEGORIAS") 
      .DisplayMember = "CATEGORIA" 
      .ValueMember = "CATEGORIA" 
      .SelectedIndex = 0 
     End With 

    End Using 

ответ

2

Его пустой, потому что, вероятно, запрос ничего не возвращает. Обратите внимание, что вы не добавляете параметр к окончательному запросу в переменной sql.

Вы создаете команду с запросом и параметром, но никогда не используете его, поэтому при выборе всех значений WHERE ([AREA] = @AREA) он ничего не возвращает.

Попробуйте это:

Dim da As New SqlDataAdapter(sqlCmd) 
+0

+1. Я не заметил, что 'sqlCmd' не используется до вашего ответа. Теперь я озадачен тем, как это не исключает ... – Neolisk

+0

Вы были правы. Я взял часть запроса WHERE и теперь отобразил данные (благодаря ответу Неолиска). Я проверил точку останова на параметре, а переменная PublicLogin.Area правильно передала значение. Я не полностью понял ваше начальное предложение, хотя ... параметр находится в запросе (@AREA) или есть что-то очевидное, что я не хватает? (бывает со мной много). –

+0

Я никогда не называю фактический sqlCMD. Goddangit.Где я должен добавить его правильно? –

2

Это выглядит странно для меня:

.DisplayMember = "CATEGORIAS_AREA" 
.ValueMember = "CATEGORIAS_AREA" 

Это должно, вероятно, будет что-то вроде этого:

.DisplayMember = "CATEGORIA" 
.ValueMember = "AREA" 

От MSDN on DisplayMember:

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

EDIT: Вам также необходимо заменить this:

Dim da As New SqlDataAdapter(sql, conn) 

с this:

Dim da As New SqlDataAdapter(sqlCmd) 

В противном случае ваши параметры никогда не используются.

+0

Пробовал. CB все еще пуст. Я немного поиграл с ним и до сих пор не ушел. –

+0

@LordRelix: Вы подтвердили, что 's.Tables (" CATEGORIAS ")' имеет какие-либо данные? – Neolisk

+0

Я сделал то, что сказал мне SysDragon ниже, и ваше решение сработало. его правильное представление данных. Теперь почему черт не работает WHERE .... –

Смежные вопросы