Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
nero_lux

WPF DataGrid com Textbox

Recommended Posts

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();

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.