2016-10-25 2 views
1

Я знаю, что этот вопрос задан тысячу раз, я сделал свое исследование, но я не могу найти ничего, что действительно исправляет эту проблему для меня. Я загружаю combobox из datatable и устанавливаю .selectedindex = -1, чтобы пользователь мог сделать выбор. Но если пользователь меняет свое мнение и хочет отменить его, они не могут этого сделать, поскольку все элементы в раскрывающемся списке имеют значение. Я натолкнулся на некоторые из них, где было предложено, чтобы пользователи щелкнули delete и установили значение .selectedIndex = -1, но я предпочел бы как-то добавить пустое значение в раскрывающемся списке, которое можно выбрать. вот что мой код выглядит ...Добавление пустой строки в databound combobox Vb.net

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

dt.Load(cmd.ExecuteReader) 

    oCombobox.DataSource = dt 
    oCombobox.ValueMember = "ID" 
    oCombobox.DisplayMember = "Name" 
    oCombobox.SelectedIndex = -1 

Я сделал довольно много исследований, и может просто Не найди практичное решение для VB.Net, я нашел несколько решений для C#, однако DataTable.AddRow() не является одной из функций для VB, поэтому я не могу реализовать его в своем проекте.

EDIT

Dim dr As DataRow = dt.NewRow 
    dr("ID") = 0 
    dr("Name") = "" 
    dt.Rows.Add(dr) 
+1

Если в этом столбце не указано значение none/nothing/null, не следует ли использовать таблицу db в качестве источника данных «none»? (Объект DataTable в C# тот же, что и для VB) – Plutonix

+0

это, но .AddRow() не работает в Vb.Net – BobSki

+1

Возможно, вы неправильно поняли, что у вас получилось, - нет AddRow для C# - it было бы 'myDt.Rows, Add()' – Plutonix

ответ

2

добавить объединение в моей процедуре с пустыми значениями:

SELECT ID = 0, 
     Name = '' 

UNION 

SELECT ID, 
     Name 
FROM YourTable 

Вы можете сделать так, чтобы Order By 0 начинается в верхней части. Не уверен, что это лучший способ сделать это, но это сработало для меня в прошлом.

Вы можете изменить DataTable и добавить новую строку с пустыми значениями:

Dim dr As DataRow = dt.NewRow 
dr("ID") = 0 
dr("Name") = "" 
dt.Rows.Add(dr) 

Если вы хотите заказать DataTable ваш лучший выбор будет использовать DataView:

Dim dv As New DataView(dt) 
dv.Sort = "ID ASC" 

Или как Плутоникс сказал в комментарии:

dt.Rows.InsertAt(dr,0)

+0

Мне это нравится, проблема в том, что я использую хранимую процедуру - и я бы хотел, чтобы она осталась в формате, который уже есть – BobSki

+1

У меня есть admin доступ, чтобы я мог обновить его, я пытаюсь найти способ сделать это, не касаясь его, поскольку он используется во всем приложении. – BobSki

+1

Простите, да, перечитайте сообщение :) – Bugs

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