Как вставить поле 'Empty' в ComboBox, связанный с DataTable

18
задан Mohit Kanwar 6 August 2015 в 07:04
поделиться

7 ответов

Существует две вещи, которые можно сделать:

  1. Добавляют пустую строку к 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.

  2. , Если Вы действительно не хотите добавлять новую строку, как упомянуто выше. Можно позволить пользователю устанавливать в NULL эти ComboBox значение путем простой обработки "Удалить" события нажатия клавиши. Когда пользователь нажмет клавишу Delete, установите SelectedIndex на-1. Необходимо также установить ComboBox.DropDownStyle на DropDownList. Поскольку это предотвратит пользователя для редактирования значений в ComboBox.

25
ответ дан 30 November 2019 в 06:12
поделиться

Я обычно создаю итератор для этого типа вещи. Это старается не загрязнять Ваши данные и работает хорошо с привязкой данных:

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";
8
ответ дан 30 November 2019 в 06:12
поделиться
cmbHierarchies.SelectedIndex = -1;
14
ответ дан 30 November 2019 в 06:12
поделиться

вставьте пустую строку в свою таблицу данных и проверьте на нее в проверке/обновлении/создавать

3
ответ дан 30 November 2019 в 06:12
поделиться

Я связал бы данные, затем вставляют пропуск в анкете в положении 0 с помощью ComboxBox. Объекты. Вставьте метод. Подобный тому, какой предложенный flipdoubt, но это добавляет объект к вершине.

0
ответ дан 30 November 2019 в 06:12
поделиться

Наклон Вы добавляете новый DataRow к DataTable перед привязкой его с DataSource?

можно использовать функцию NewRow DataTable для достижения этого:

http://msdn.microsoft.com/en-us/library/system.data.datatable.newrow.aspx

2
ответ дан 30 November 2019 в 06:12
поделиться

Er, Вы не можете только добавить объект по умолчанию к ComboBox после привязки данных?

0
ответ дан 30 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: