Usuário com melhor resposta
textbox dinamico em listview / gridview

Pergunta
-
Estou com a seguinte dificuldade: existe um listview (wpf - desktop) que recebe os valores p/ uma coluna a partir de um método, até aí td bem. As demais colunas variam de 1-10, de acordo com outras informação que obtenho no mesmo método que popula o listview.
Estas colunas adicionais, devem ser editadas, pensei em usar textboxes dentro, mas não consegui fazer isto.
Após inúmeras tentativas, o mais próximo que cheguei foi o seguinte:
criar 1 listview com uma coluna e definir o items.source p/ meu método
gerar um stackpanel ao lado, e neste criar um header através de uma linha de labels, e
outra linha de textboxes. A quantidade destes componentes eu vario conforme a necessidade.
não sei se estou usando a abordagem correta.
Aqui vai parte de meu código:
List<TextBox> listTbox = new List<TextBox>(); // p/ referenciar os textboxes
private void obtemCiclo()
{
Classe ciclo = new Classe();
//definindo o ciclo em uso, sem isto, getallprojecoes nao funciona
int inicio, fim;
inicio = xxx;
fim = yyy; //estes valores eu obtenho por outros métodos. = qtas colunas de textbox
//gerar os labels com anos - uma vez que NÃO consigo fazer isto no gridview
for (int i = inicio; i <= fim; i++)
{
Label lbl = new Label();
lbl.Width = 50;
lbl.Margin = new Thickness(3);
lbl.Content = i.ToString();
stkAno.Children.Add(lbl); //add no stackpanel
}
//gera os textboxes p/ cada ano
for (int i = inicio; i <= fim; i++)
{
TextBox txtBox = new TextBox();
// txtBox.Name = i.ToString(); //não aceita
txtBox.MinWidth = 50;
txtBox.Text = "0.00";
txtBox.Margin = new Thickness(3);
listTbox.Add(txtBox);
stkTxt.Children.Add(txtBox); //adiciona no stackpanel
}
//lista de informações - obtem a 1a coluna de dados que preciso
lsvProjecao.ItemsSource = ciclo.getAllCargas();
} //fim do método obtemCiclo()Enfim, tenho que criar uma tabela, em que a 1a coluna tem header fixo,
e suas linhas c/ valores que obtenho via binding, e as demais colunas variam os headers e os campos devem ser editáveis.
Respostas
-
Para a primeira coluna é só colocar mais uma coluna antes e setar a propriedade DisplayMemberBinding para
column.DisplayMemberBinding = new Binding();
Mas, como eu falei, a datagrid dá muito mais recursos para você, tente usar ela.
[]s
Bruno
MVP Client Development - http://msmvps.com/blogs/bsonnino- Marcado como Resposta Chris_lynx domingo, 3 de outubro de 2010 13:09
Todas as Respostas
-
Você pode fazer algo como
int inicio = xxxx; int fim = yyyy; for (int i = inicio; i <= fim ; i++) { column = new GridViewColumn(); column.Header = i.ToString(); gridView.Columns.Add(column); }
Mas eu sugiro que ao invés de uma ListView, use uma DataGrid, que é mais flexível
[]s
Bruno
MVP Client Development - http://msmvps.com/blogs/bsonnino- Sugerido como Resposta AndreAlvesLimaModerator quarta-feira, 29 de setembro de 2010 22:17
-
putz, obrigado... mas tem uma restrição.
Apenas a 1a coluna do grid tem um binding com um arraylist, as demais, devem ficar
disponíveis para edição. O gridview não permite isto, pelo que andei vendo.
E onde encontro este componente datagrid para WPF?
- Editado Chris_lynx quinta-feira, 30 de setembro de 2010 19:10
-
Você colocou um GridView na sua ListView?
<ListView>
<ListView.View>
<GridView x:Name="gridView" />
</ListView.View>
</ListView>A datagrid do WPF está no VS2010 ou então no WPF Toolkit: http://wpf.codeplex.com
Bruno
MVP Client Development - http://msmvps.com/blogs/bsonnino -
sim, coloquei a gridview. Será que com um template conseguiria fazer isto?
a 1a coluna fixa, e as demais variando em tempo de execução?
- Editado Chris_lynx sexta-feira, 1 de outubro de 2010 11:04 erro de digitacao
-
Para a primeira coluna é só colocar mais uma coluna antes e setar a propriedade DisplayMemberBinding para
column.DisplayMemberBinding = new Binding();
Mas, como eu falei, a datagrid dá muito mais recursos para você, tente usar ela.
[]s
Bruno
MVP Client Development - http://msmvps.com/blogs/bsonnino- Marcado como Resposta Chris_lynx domingo, 3 de outubro de 2010 13:09