Существует две вещи, которые можно сделать:
Добавляют пустую строку к DataTable
, который возвращается из хранимой процедуры.
DataRow emptyRow = hierarchies.NewRow();
emptyRow["guid"] = "";
emptyRow["ObjectLogicalName"] = "";
hierarchies.Rows.Add(emptyRow);
Создают DataView и сортируют его с помощью столбца ObjectLogicalName. Это сделает недавно добавленную строку первой строкой в DataView.
DataView newView =
new DataView(hierarchies, // source table
"", // filter
"ObjectLogicalName", // sort by column
DataViewRowState.CurrentRows); // rows with state to display
Затем устанавливает представление данных как DataSource
из ComboBox
.
, Если Вы действительно не хотите добавлять новую строку, как упомянуто выше. Можно позволить пользователю устанавливать в NULL эти ComboBox
значение путем простой обработки "Удалить" события нажатия клавиши. Когда пользователь нажмет клавишу Delete, установите SelectedIndex
на-1. Необходимо также установить ComboBox.DropDownStyle
на DropDownList
. Поскольку это предотвратит пользователя для редактирования значений в ComboBox
.
Я обычно создаю итератор для этого типа вещи. Это старается не загрязнять Ваши данные и работает хорошо с привязкой данных:
DataTable hierarchies = _database.GetAvailableHierarchies(cmbDataDefinition.SelectedValue.ToString()).Copy();//Calls SP
cmbHierarchies.DataSource = GetDisplayTable(hierarchies);
cmbHierarchies.ValueMember = "guid";
cmbHierarchies.DisplayMember = "ObjectLogicalName";
...
private IEnumerable GetDisplayTable(DataTable tbl)
{
yield return new { ObjectLogicalName = string.Empty, guid = Guid.Empty };
foreach (DataRow row in tbl.Rows)
yield return new { ObjectLogicalName = row["ObjectLogicalName"].ToString(), guid = (Guid)row["guid"] };
}
Правовая оговорка: Я не скомпилировал этот код, но много раз использовал этот шаблон.
Примечание: я был в WPF и земле ASP.NET в течение последних лет. По-видимому, поле комбинированного списка Winforms хочет IList, не IEnumerable. Более дорогостоящая операция должна была бы создать список. Этот код является действительно потоком краткости и мной действительно, действительно не скомпилировали его:
DataTable hierarchies = _database.GetAvailableHierarchies(cmbDataDefinition.SelectedValue.ToString()).Copy();
List<KeyValuePair<string, Guid>> list = new List<KeyValuePair<string, Guid>>(hierarchies.Rows.Cast<DataRow>().Select(row => new KeyValuePair<string, Guid>(row["Name"].ToString(), (Guid)row["Guid"])));
list.Insert(0, new KeyValuePair<string,Guid>(string.Empty, Guid.Empty));
cmbHierarchies.DataSource = list;
cmbHierarchies.ValueMember = "Value";
cmbHierarchies.DisplayMember = "Key";
вставьте пустую строку в свою таблицу данных и проверьте на нее в проверке/обновлении/создавать
Я связал бы данные, затем вставляют пропуск в анкете в положении 0 с помощью ComboxBox. Объекты. Вставьте метод. Подобный тому, какой предложенный flipdoubt, но это добавляет объект к вершине.
Наклон Вы добавляете новый DataRow к DataTable перед привязкой его с DataSource?
можно использовать функцию NewRow DataTable для достижения этого:
http://msdn.microsoft.com/en-us/library/system.data.datatable.newrow.aspx
Er, Вы не можете только добавить объект по умолчанию к ComboBox после привязки данных?