none
textbox dinamico em listview / gridview RRS feed

  • 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.

    quarta-feira, 29 de setembro de 2010 17:27

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
    sexta-feira, 1 de outubro de 2010 12:36

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
    quarta-feira, 29 de setembro de 2010 20:45
  • 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
    quinta-feira, 30 de setembro de 2010 18:58
  • 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
    quinta-feira, 30 de setembro de 2010 19:06
  • 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
    sexta-feira, 1 de outubro de 2010 11:04
  • 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
    sexta-feira, 1 de outubro de 2010 12:36