поле со списком по умолчанию winforms c # - PullRequest
5 голосов
/ 31 августа 2009

Привет, я хочу привязать некоторые значения, чтобы установить флажок динамически.

dataset ds = //getting emp values form database;
cbemp.ValueMember = "empid";
cbemp.DisplayMember = "empname";
cbemp.DataSource = ds.Tables["emp"];

работает нормально. Но я хочу добавить

«Выберите emplyoee» в качестве значения по умолчанию для флажка.

Но мой флажок напрямую добавляет значения типа

a1
a2
a3

вот так.

Я пытался так

cbemp.Items.Insert(0, "Select emplyoee");

но он не работает

как я могу добавить это?

Ответы [ 7 ]

8 голосов
/ 31 августа 2009

Когда вы используете привязку данных, вы не можете «вручную» добавлять или удалять элементы. Единственный способ добиться желаемого с помощью привязки данных - это сначала вставить строку в DataTable с требуемым значением или заполнить комбинированный список кодом (добавить элемент «Выбрать сотрудника», а затем выполнить итерацию DataTable строки для добавления записей).

Возможно, что-то подобное может сработать:

// create new row for "Select employee"
DataRow row = ds.Tables["emp"].NewRow();
row["empid"] = -1;
row["empname"] = "Select employee";
// insert the row at the top of the table
ds.Tables["emp"].Rows.InsertAt(row, 0);
// do the databinding
cbemp.ValueMember = "empid";
cbemp.DisplayMember = "empname";
cbemp.DataSource = ds.Tables["emp"];

Я не очень часто использую привязку данных, поэтому у меня могут быть недостатки, о которых я не знаю (но я уверен, что сообщество скажет об этом в этом случае).

4 голосов
/ 03 августа 2010

Вставка данных в ваш источник данных - плохая идея. Это способствует нарушению абстракций ваших слоев и может привести к некоторым проблемам, если вы используете тот же источник данных в другом месте.

Вместо этого вы можете легко расширить ComboBox, чтобы отобразить сообщение «Пожалуйста, выберите», когда элемент не выбран.

Я написал в блоге об этой проблеме и предоставил код здесь: http://www.byteauthor.com/2010/08/inner-label-in-combobox/

0 голосов
/ 19 августа 2014

В моем случае (комбинированный список данных) я решил проблему следующим образом. Конечно, лучший способ - это Кевин Куломб.

ComboBox.SelectedIndex = -1;
ComboBox.Text = "Please, select something";

С небольшим количеством кода вы можете легко управлять этим сценарием.

0 голосов
/ 02 октября 2013

если для ComboBoxStyle установлено значение DropDownList (таким образом, пользователь не может редактировать комбинированный список), то самый простой способ убедиться, что пользователь выбирает элемент, это установить selectedIndex = -1, вы всегда можете добавить «Пожалуйста, выберите» и т. Д. ВЫШЕ из списка. 1001 *

0 голосов
/ 25 октября 2011

Приведенное выше решение лучше, но иногда может пригодиться один трюк - объединить «поддельную» запись в SQL, который возвращает набор записей для привязки данных. В этом случае что-то вроде:

select 0 as empid, 'Please select' as empname
union
select empid, empname from emp
order by empid

Конечно, вам придется защитить базу данных от случайной записи записи «0» обратно (например, если пользователь не делает выбор), но это не так уж сложно.

0 голосов
/ 31 августа 2009

Когда вы управляете данными, вы не можете добавлять элементы вручную, я думаю.

Чтобы обойти эту проблему, вы можете либо добавить новый элемент в свой источник данных, либо добавить элементы вручную.

0 голосов
/ 31 августа 2009

Я думаю, вам нужно добавить его в базовую таблицу данных (ds.Tables ["emp"]), чтобы она отображалась в виде записи в списке при использовании элементов управления с привязкой к данным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...