Usuário com melhor resposta
Como inserir uma linha vazia no ComboBox do WPF ?

Pergunta
-
Olá a todos!
Procurei muito na net e não consigo uma solução. Gostaria de colocar no ComboBox uma linha vazia junto com as demais linhas para que não fique selecionado uma fixa e o usuário tenha a opção de deixar o ComboBox vazio.
Alguém sabe como?
Este é meu ComboBox:
<ComboBox Name="cmbTipo" SelectedValuePath="Id" DisplayMemberPath="Descricao" Grid.Column="1" Grid.Row="1" Height="30" HorizontalAlignment="Left" Margin="317,39,0,0" VerticalAlignment="Top" Width="387"> </ComboBox>
E assim eu insiro dados nele:
Alguém pode me ajudar?this.cmbTipo.ItemsSource = ((IListSource)dataTable).GetList();
Respostas
-
Tiago,
Você pode utilizar o método Insert da sua List<T> para inserir um item vazio na posição zero:
List<Pessoa> source = new List<Pessoa>(); source.Add(new Pessoa() { Nome = "André", Sobrenome = "Lima" }); source.Add(new Pessoa() { Nome = "Fulano", Sobrenome = "de Tal" }); source.Insert(0, new Pessoa()); meuCombobox.ItemsSource = source; meuCombobox.DisplayMemberPath = "Nome"; meuCombobox.SelectedValuePath = "Codigo";
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta AndreAlvesLimaModerator quarta-feira, 16 de fevereiro de 2011 17:21
- Marcado como Resposta Tiago C. Maia segunda-feira, 21 de fevereiro de 2011 11:47
-
Andre, funcionou bem também!
Eu já tinha descoberto essa mesma artimanha com DataTable ao invés de List. Neste caso ficou assim.
public static IList PreencherComboBox(DataTable dt) { DataRow dr = dt.NewRow(); try { // Define a linha vazia dr[0] = 0; dr[1] = String.Empty; // Insere a linha vazia no DataTable dt.Rows.InsertAt(dr, 0); return ((IListSource)dt).GetList(); } catch (Exception e) { TratamentoError(e); } finally { dr = null; } return null; }
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 21 de fevereiro de 2011 16:30
Todas as Respostas
-
Ola Tiago
insira um ComboBoxitem vazio
<ComboBoxItem Content=""/>
<ComboBox Name="cmbTipo"
SelectedValuePath="Id"
DisplayMemberPath="Descricao"
Height="30"
HorizontalAlignment="Left"
Margin="317,39,0,0"
VerticalAlignment="Top"
Width="213.333" d:LayoutOverrides="GridBox">
<ComboBoxItem Content=""/>
</ComboBox>te mais
-
Rafael, obrigado por responder.
Ao colocar o ComboBoxItem vazio, a aplicação passou a exibir o seguinte erro: "Items collection must be empty before using ItemsSource."
E o ComboBox não esta mais sendo alimentado. Este mesmo erro ocorre usando a propriedade: "d:LayoutOverrides="GridBox" e não usando ela.
Acho que o WPF não permite inserir dados no ComboBox de duas formas ao mesmo tempo.
O meu ComboBox ficou assim:
<ComboBox Name="cmbTipo" SelectedValuePath="Id" DisplayMemberPath="Descricao" Grid.Column="1" Grid.Row="1" Height="30" HorizontalAlignment="Left" Margin="317,39,0,0" VerticalAlignment="Top" Width="387"> <ComboBoxItem Content=""/> </ComboBox>
Tem alguma outra ideia?
Att.
-
-
-
O problema de colocar um item vazio é que eu terei que criar um novo DataTable ou List<> (caso seja uma coleção de objetos), no novo DataTable ou List colocarei o item vazio e então percorrendo o DataTable/List original (foreach) adicionar os seus itens no novo DataTable/List.
Isso vai afetar a performace, a menos que tenha um jeito de inserir uma DataRow vazia no inicio do DataTable ou um Objeto vazio no inicio de uma List.
Sabe me dizer se tem como fazer isso? Se eu simplesmente adicionar a nova DataRow ou Objeto eles ficam no final.
Att.
-
Tiago,
Você pode utilizar o método Insert da sua List<T> para inserir um item vazio na posição zero:
List<Pessoa> source = new List<Pessoa>(); source.Add(new Pessoa() { Nome = "André", Sobrenome = "Lima" }); source.Add(new Pessoa() { Nome = "Fulano", Sobrenome = "de Tal" }); source.Insert(0, new Pessoa()); meuCombobox.ItemsSource = source; meuCombobox.DisplayMemberPath = "Nome"; meuCombobox.SelectedValuePath = "Codigo";
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta AndreAlvesLimaModerator quarta-feira, 16 de fevereiro de 2011 17:21
- Marcado como Resposta Tiago C. Maia segunda-feira, 21 de fevereiro de 2011 11:47
-
Andre, funcionou bem também!
Eu já tinha descoberto essa mesma artimanha com DataTable ao invés de List. Neste caso ficou assim.
public static IList PreencherComboBox(DataTable dt) { DataRow dr = dt.NewRow(); try { // Define a linha vazia dr[0] = 0; dr[1] = String.Empty; // Insere a linha vazia no DataTable dt.Rows.InsertAt(dr, 0); return ((IListSource)dt).GetList(); } catch (Exception e) { TratamentoError(e); } finally { dr = null; } return null; }
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 21 de fevereiro de 2011 16:30