none
WPF-C# DataGrid Leggere il valore della cella dopo aver fatto DoubleClick RRS feed

  • Domanda

  • <DataGrid x:Name="d_T" Margin="0" ColumnWidth="*" AutoGenerateColumns="False" IsReadOnly="True" MouseDoubleClick="d_T_MouseDoubleClick" > <DataGrid.RowDetailsTemplate> <DataTemplate> <TextBlock Name="Descrizione" Background="White" Text="{Binding Descrizione}" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> </DataTemplate> </DataGrid.RowDetailsTemplate> <DataGrid.Columns> <DataGridTextColumn x:Name="Nome" Header="Nome" Width="*" Binding="{Binding Nome}"> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="VerticalAlignment" Value="Center" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn> <DataGridTextColumn x:Name="Cognome" Header="Cognome" Width="*" Binding="{Binding Cognome}"> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="VerticalAlignment" Value="Center" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn> <DataGridTextColumn x:Name="PE" Header="PE" Width="*" Binding="{Binding PE}"> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="VerticalAlignment" Value="Center" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn> </DataGrid.Columns> </DataGrid>

    Io ho creato Datagrid quello che vorrei fare è mostrare con un message.Box il valore della cella su qui si è fatto il doppio Click, come posso fare?

    Grazie

    lunedì 1 luglio 2019 14:19

Risposte

  • Ho fatto un test e per ottenere quel che vuoi io ho fatto 2 cose:

    <!-- Nella Datagrid ho modificato la selection unit in Cell
    poi ho intercettato 2 eventi, selected cells changed che mi restituisce le celle selezionate (o la cella in questo caso)
    e poi il Doppio click del mouse -->
    
    <DataGrid 
    	Name="dgData" 
    	SelectionUnit="Cell"
    	SelectedCellsChanged="DgData_SelectedCellsChanged"
    	MouseDoubleClick="DgData_MouseDoubleClick"/>

    Nel codice dei due Event handler faccio 2 cose:

    public string SelectedCellValue
    {
    	get
    	{
    		return mSelectedCellValue;
    	}
    	set
    	{
    		mSelectedCellValue = value;
    	}
    }
    
    
    
    //Sull'evento SelectedCellsChanged rilevo il valore della 
    //cella (nel mio caso è una datatable quindi è un po' 
    //farraginoso ma osservando in Debug dovresti trovare
    //il contenuto della cella selezionata
    //Metto tale contenuto in una property
    
    private void DgData_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
    {
    	if (e.AddedCells != null)
    	{
    		StringBuilder sb = new StringBuilder();
    		foreach (var cell in e.AddedCells)
    		{
    			int index = cell.Column.DisplayIndex;
    			string value = ((DataRowView)cell.Item).Row.ItemArray[index].ToString();
    			sb.AppendLine(value);
    		}
    		SelectedCellValue = sb.ToString();
    	}
    }
    
    //Sul doppio click visualizzo il valore salvato
    //Sul selected cells changed che è il valore della cella
    //su cui ho fatto doppio click
    private void DgData_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
    	MessageBox.Show(SelectedCellValue);
    }

    Saluti


    Sabrina C. - http://www.dotnetwork.it

    • Contrassegnato come risposta StarSquare martedì 2 luglio 2019 17:46
    lunedì 1 luglio 2019 15:16

Tutte le risposte

  • Ho fatto un test e per ottenere quel che vuoi io ho fatto 2 cose:

    <!-- Nella Datagrid ho modificato la selection unit in Cell
    poi ho intercettato 2 eventi, selected cells changed che mi restituisce le celle selezionate (o la cella in questo caso)
    e poi il Doppio click del mouse -->
    
    <DataGrid 
    	Name="dgData" 
    	SelectionUnit="Cell"
    	SelectedCellsChanged="DgData_SelectedCellsChanged"
    	MouseDoubleClick="DgData_MouseDoubleClick"/>

    Nel codice dei due Event handler faccio 2 cose:

    public string SelectedCellValue
    {
    	get
    	{
    		return mSelectedCellValue;
    	}
    	set
    	{
    		mSelectedCellValue = value;
    	}
    }
    
    
    
    //Sull'evento SelectedCellsChanged rilevo il valore della 
    //cella (nel mio caso è una datatable quindi è un po' 
    //farraginoso ma osservando in Debug dovresti trovare
    //il contenuto della cella selezionata
    //Metto tale contenuto in una property
    
    private void DgData_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
    {
    	if (e.AddedCells != null)
    	{
    		StringBuilder sb = new StringBuilder();
    		foreach (var cell in e.AddedCells)
    		{
    			int index = cell.Column.DisplayIndex;
    			string value = ((DataRowView)cell.Item).Row.ItemArray[index].ToString();
    			sb.AppendLine(value);
    		}
    		SelectedCellValue = sb.ToString();
    	}
    }
    
    //Sul doppio click visualizzo il valore salvato
    //Sul selected cells changed che è il valore della cella
    //su cui ho fatto doppio click
    private void DgData_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
    	MessageBox.Show(SelectedCellValue);
    }

    Saluti


    Sabrina C. - http://www.dotnetwork.it

    • Contrassegnato come risposta StarSquare martedì 2 luglio 2019 17:46
    lunedì 1 luglio 2019 15:16
  • Grazie al tuo aiuto ho risolto
    martedì 2 luglio 2019 17:46