none
Datagrid - visualizar dados da linha seleccionada. RRS feed

  • Pergunta

  • Ola, 

    O que eu estou a tentar fazer é: ao dar duplo click numa linha de uma datagrid, surgir uma mensagem a dizer o valor de um determinado campo (coluna) da linha seleccionada. Alguém sabe como se faz? é com o selectedItem?

    sexta-feira, 19 de novembro de 2010 14:06

Respostas

  • Olá Tiago,
    Segue um exemplo de como recuperar dados da linha do grid com o duplo click, espero que ajude.

    XAML

    <Grid>
       <DataGrid x:Name="dtg">
          <DataGrid.RowStyle>
            <Style>
              <EventSetter Event="DataGridRow.MouseDoubleClick" Handler="dataGridRow_MouseDoubleClick"/>
            </Style>
          </DataGrid.RowStyle>      
       </DataGrid>
    </Grid>
    
    Code behind
    public MainWindow()
    {
        InitializeComponent();
    
        this.LoadDtg();
    }
    
    public void LoadDtg()
    {
       List<Person> personList = new List<Person>();
        personList.Add(new Person() { PersonAge = 20, PersonName = "Ana" });
        personList.Add(new Person() { PersonAge = 22, PersonName = "Maria" });
       personList.Add(new Person() { PersonAge = 22, PersonName = "Anderson" });
    
       this.dtg.ItemsSource = personList;      
    }
    
    void dataGridRow_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
       DataGridRow row = e.Source as DataGridRow;
       MessageBox.Show(((Person)row.Item).PersonName);
    }  
    Classe entity para carregar o DataGrid
    public class Person
    {
       public string PersonName { get; set; }
       public int PersonAge { get; set; }
    }
    
    Att.
    Anderson

    segunda-feira, 22 de novembro de 2010 10:34
  • Entendi .. sem problemas ... tente a seguinte alteração...

    void dataGridRow_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
       DataGridRow row = e.Source as DataGridRow;
    
       MessageBox.Show(((System.Data.DataRowView)(row.Item)).Row.ItemArray[0].ToString());
    } 
    
    Att.
    Anderson
    segunda-feira, 22 de novembro de 2010 14:07

Todas as Respostas

  • Alguém tem uma dica?

    O que eu queria basicamente era: eu tenho uma datagrid... com várias colunas, por exemplo:

    "nome, morada, telefone", e o que eu pretendo é ao fazer duplo click numa linha, devolver o valor da morada na linha seleccionada. Como posso fazer?

     

    Obrigada e até ja

     

    segunda-feira, 22 de novembro de 2010 10:02
  • Olá Tiago,
    Segue um exemplo de como recuperar dados da linha do grid com o duplo click, espero que ajude.

    XAML

    <Grid>
       <DataGrid x:Name="dtg">
          <DataGrid.RowStyle>
            <Style>
              <EventSetter Event="DataGridRow.MouseDoubleClick" Handler="dataGridRow_MouseDoubleClick"/>
            </Style>
          </DataGrid.RowStyle>      
       </DataGrid>
    </Grid>
    
    Code behind
    public MainWindow()
    {
        InitializeComponent();
    
        this.LoadDtg();
    }
    
    public void LoadDtg()
    {
       List<Person> personList = new List<Person>();
        personList.Add(new Person() { PersonAge = 20, PersonName = "Ana" });
        personList.Add(new Person() { PersonAge = 22, PersonName = "Maria" });
       personList.Add(new Person() { PersonAge = 22, PersonName = "Anderson" });
    
       this.dtg.ItemsSource = personList;      
    }
    
    void dataGridRow_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
       DataGridRow row = e.Source as DataGridRow;
       MessageBox.Show(((Person)row.Item).PersonName);
    }  
    Classe entity para carregar o DataGrid
    public class Person
    {
       public string PersonName { get; set; }
       public int PersonAge { get; set; }
    }
    
    Att.
    Anderson

    segunda-feira, 22 de novembro de 2010 10:34
  • O seu exemplo funcionou ... mas a datagrid fica com preenchimento estático! Eu estou usando dataset para preencher a minha datagrid ... e assim não funciona :-(
    segunda-feira, 22 de novembro de 2010 11:53
  • Entendi .. sem problemas ... tente a seguinte alteração...

    void dataGridRow_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
       DataGridRow row = e.Source as DataGridRow;
    
       MessageBox.Show(((System.Data.DataRowView)(row.Item)).Row.ItemArray[0].ToString());
    } 
    
    Att.
    Anderson
    segunda-feira, 22 de novembro de 2010 14:07
  • Quanto tento executar ocorre uma excepção: "Object reference not set to an instance of an object". Mas se colocar preenchimento estático corre tudo direitinho.

     

    :-/

    segunda-feira, 22 de novembro de 2010 15:00
  • Esse erro ocorre quando vc dá o duplo o clique no grid?

    Você pode postar o código  ?

    Att.
    Anderson
    segunda-feira, 22 de novembro de 2010 15:29
  • Tiago,

    Conseguiu solucionar essa sua questão?


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quinta-feira, 23 de dezembro de 2010 12:46
    Moderador
  • Ola Pessoal,

    Estou com esse mesmo problema, preciso selecionar uma linha do datagrid com DoubleClick, e pegar uma informacao de uma coluna especifica.

    Alguem conseguio resolver esse problema?

     

    Perez Mitozo


    Perez Mitozo
    domingo, 16 de janeiro de 2011 21:24
  • Bom dia pessoal.

    Também estava com esse problema e consegui resolver da seguinte forma:

     

        private void datagrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
          DataRowView row = (DataRowView)datagrid1.CurrentItem;
          MessageBox.Show(row.Row.ItemArray[0].ToString());
    
        }
    

    [0] é o índice da coluna procurada.

     

    Espero que ajude.


    Victor Camargos
    quinta-feira, 27 de janeiro de 2011 11:07
  • Obrigado Vitor, eu ja tinha conseguido resolver o problema, e fico agradecido pelo seu interesse em responder.

    So mais uma pergunta, quando o doubleclick e selecionado, executo varias operações (consulta, inserção... ) mas na saida o foco contiua no datagrid, como faço pra passar o foco para um outro controle, por exemplo um textbox?

    ja tentei Focus() mas nao funciona.

    Perez Mitozo

     


    Perez Mitozo
    quinta-feira, 27 de janeiro de 2011 13:27