Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

nero_lux

WPF DataGrid com Textbox

Mensagens Recomendadas

nero_lux

Bom Dia, estou a tentar criar uma WPF DataGrid e a essa Grid associar diversos controls, tais como ComboBox, TextBox, DataPiker etc programaticamente, sem ser por XAML.

Comecei por tentar criar um DataGrid simples, somente com uma TextBox, e depois sim tentar adicionar outros Controls. Mas estou com problemas.

Consegui adicionar uma TextBox a minha DataGrid o problema é que mostra sempre o valor do primeiro registo na minha DataGrid.

Cria as linha necessárias, mas sempre com a mesma informação, a do primeiro registo.

O que estou a fazer de errado?

Código:


DataSet DatSet = new DataSet();
SqlDataAdapter Da = new SqlDataAdapter("Select IdModelo,Modelo from dbo.VRptObterModelos ", ModMain.MyGestCalCnn);
Da.Fill(DatSet);


GrdTeste.AutoGenerateColumns = false;
GrdTeste.CanUserAddRows = true;
GrdTeste.CanUserDeleteRows = true;
           
Microsoft.Windows.Controls.DataGridTextColumn Txt = new Microsoft.Windows.Controls.DataGridTextColumn();
Txt.Header = DatSet.Tables[0].Columns["Modelo"].ColumnName;
Txt.CanUserResize = false;
Txt.CanUserReorder = false;
Txt.IsReadOnly = false;
Binding x = new Binding();
x.Source = DatSet.Tables[0].DefaultView;
x.Path = new PropertyPath("Modelo");
x.Mode = BindingMode.OneTime;
Txt.Binding = x;
GrdTeste.Columns.Add(Txt);

foreach (DataRow r in DatSet.Tables[0].Rows)
{

TextBox TxtGrid = new TextBox();
        //TxtGrid.SetBinding(TextBox.TextProperty, x);
        TxtGrid.SetValue(TextBox.TextProperty, r["Modelo"].ToString());
        GrdTeste.Items.Add(TxtGrid);

}

GrdTeste.Items.Refresh();

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
saramgsilva

Eu não custo usar muito dataSet, no entanto, acho que algo não está bem... vejamos...

1º Defines os teus dados

DataSet DatSet = new DataSet();

SqlDataAdapter Da = new SqlDataAdapter("Select IdModelo,Modelo from dbo.VRptObterModelos ", ModMain.MyGestCalCnn);

Da.Fill(DatSet);

...

2º Defines algumas propriedades da Grid:

GrdTeste.AutoGenerateColumns = false;

GrdTeste.CanUserAddRows = true;

GrdTeste.CanUserDeleteRows = true;

...

3º Define a tua coluna

Microsoft.Windows.Controls.DataGridTextColumn Txt = new Microsoft.Windows.Controls.DataGridTextColumn();

Txt.Header = DatSet.Tables[0].Columns["Modelo"].ColumnName;

Txt.CanUserResize = false;

Txt.CanUserReorder = false;

Txt.IsReadOnly = false;

Binding x = new Binding();

x.Source = DatSet.Tables[0].DefaultView;

x.Path = new PropertyPath("Modelo");

x.Mode = BindingMode.OneTime;

Txt.Binding = x;

GrdTeste.Columns.Add(Txt);

Aconcelho-te a usar como BindingMode o valor default ou twoWay ( mas podes usar os outros modos, desde que tenhas atenção o seu funcionamento, quando é que o target e source "comunicam")

Retira o source do binding: x.Source = DatSet.Tables[0].DefaultView;

Aqui, não é preciso dizer qual é o source, apenas é importante definir qual é o Path (  ás vezes também se define o BindingMode e UpdateSourceTrigger)

4º Tentas definir quais são os objectos que vai mostrar na datagrid  e mandas actualizar a informação da datagrid

foreach (DataRow r in DatSet.Tables[0].Rows)

{

        TextBox TxtGrid = new TextBox();

        //TxtGrid.SetBinding(TextBox.TextProperty, x);

        TxtGrid.SetValue(TextBox.TextProperty, r["Modelo"].ToString());

        GrdTeste.Items.Add(TxtGrid);

}

GrdTeste.Items.Refresh();

Aqui está algo que acho que não está bem, eu faria apenas

GrdTeste.ItemsSource= DatSet.Tables[0]

O binding que foi definido para a coluna e ao qual não definimos o source,  irá saber que os elementos do ItemsSource são os elementos aprensentar...

Não pode testar o que disse, porque não tenho VS instalado... penso que não me escapou nada.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.