binding datagrid c# wpf

Marco Boscolo 0 Punti di reputazione
2025-01-08T09:42:00.51+00:00
Ciao A tutti,
ho creato questo codice

namespace WpfApplication6 {

/// <summary>
/// Logica di interazione per MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    ObservableCollection<Messaggi> messaggi = new ObservableCollection<Messaggi>();

    
    public MainWindow()
    {
        InitializeComponent();
        dg.ItemsSource = messaggi;
    }
    public class Messaggi
    {
        public int COLOR { get; set; }
        public String ID { get; set; }
        public string Name { get; set; }        
    }
    private void button_Click(object sender, RoutedEventArgs e)    //inserisce stringhe
    {   
        messaggi.Add(new Messaggi() { COLOR = 1, ID = "[001]", Name = "rerer" });
        messaggi.Add(new Messaggi() { COLOR = 1, ID = "[002]", Name = "rerer" });
        messaggi.Add(new Messaggi() { COLOR = 3, ID = "[003]", Name = "gg" });
        messaggi.Add(new Messaggi() { COLOR = 2, ID = "[004]", Name = "rerer" });
    }
    private void ACK_Click(object sender, RoutedEventArgs e)
    {
        for(int i=0;  i<messaggi.Count; i++)
        {
            if (messaggi[i].COLOR == 2)    //se la riga e' verde la cancello
            {
                messaggi.RemoveAt(i);
                i--;
            }
            else if (messaggi[i].COLOR == 3) //se la riga e' rosso lampeggiante la faccio diventare rosssa fissa
            {
                messaggi[i].COLOR = 1;
            }
        }
    }

    private void button2_Click(object sender, RoutedEventArgs e)
    {
        messaggi.Add(new Messaggi() { COLOR = 2, ID = "[004]", Name = "pecora" });
    }
}
```Che interagisce con questo wpf:

<Window x:Class="WpfApplication6.MainWindow"
```xml
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApplication6"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid Margin="0,0,0,98">
    <DataGrid x:Name="dg" ItemsSource="{Binding messaggi}" CanUserAddRows="False" AutoGenerateColumns="False" Foreground="White" RowHeight="25" FontSize="16" VerticalContentAlignment="Center" CanUserResizeColumns="False" CanUserResizeRows="False" VerticalGridLinesBrush="{x:Null}">
            <DataGrid.Resources>
            <!-- evita di evidenziare le caselle con il click del mouse-->
            <ResourceDictionary>
                <Style x:Key="{x:Type DataGridCell}" TargetType="{x:Type DataGridCell}">
                    <Setter Property="Background" Value="{x:Null}" />
                    <Setter Property="BorderBrush" Value="{x:Null}" />
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Background" Value="{x:Null}" />
                            <Setter Property="BorderBrush" Value="{x:Null}" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
                <Style TargetType="{x:Type DataGridRow}">
                    <Setter Property="Background" Value="{x:Null}" />
                    <Setter Property="BorderBrush" Value="{x:Null}" />
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Background" Value="{x:Null}" />
                            <Setter Property="BorderBrush" Value="{x:Null}" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ResourceDictionary>
        </DataGrid.Resources>
        <DataGrid.ColumnHeaderStyle>
            <!-- stile rigadi testa tabella-->
            <Style TargetType="DataGridColumnHeader">
                <!--<Setter Property="Background" Value="Blue"></Setter>-->
                <Setter Property="Visibility" Value="Collapsed"></Setter>
            </Style>
        </DataGrid.ColumnHeaderStyle>
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Setter Property="Background" Value="red"/>
                <!-- Colore standard righe in assenza di eventi -->
                <Style.Triggers>
                    <!-- eventi che spedificano il colore di una riga al valore della colonna ID-->
                    <DataTrigger Binding="{Binding COLOR}" Value="1">
                        <Setter Property="Background" Value="Red"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding COLOR}" Value="2">
                        <Setter Property="Background" Value="Green"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding COLOR}" Value="3">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard x:Name="Blink" 
                                AutoReverse="True" 
                                RepeatBehavior="Forever">
                                    <ColorAnimationUsingKeyFrames BeginTime="00:00:00"
                            Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)">
                                        <EasingColorKeyFrame KeyTime="00:00:01" 
                                                 Value= "Black" />
                                    </ColorAnimationUsingKeyFrames>
                                </Storyboard>
                            </BeginStoryboard>
                        </DataTrigger.EnterActions>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.Columns >
            <!-- colonne datagrid -->
            <DataGridTextColumn Header="" Binding="{Binding ID}" Width="50" IsReadOnly="True" />
            <DataGridTextColumn Header="" Binding="{Binding Name}" Width="*" IsReadOnly="True" />
            <DataGridTextColumn Header="" Binding="{Binding Ora}" Width="100" IsReadOnly="True"/>
        </DataGrid.Columns>
    </DataGrid>
    <Button x:Name="button" Content="Button" Margin="68,0,0,-63" Click="button_Click" Height="25" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="75"/>
    <Button x:Name="ACK" Content="ACK" Margin="0,0,65,-63" Click="ACK_Click" Height="25" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="75"/>
    <Button x:Name="button_Copy" Content="Button" Margin="220,0,0,-46" Click="button2_Click" Height="25" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="75"/>
</Grid>
```</Window>

mi servirebbe consiglio per 2 cose:
- se lancio piu' volte button_Click le righe lampeggianti non hanno il lampeggio sincronizzato. e' possibile sincronizzarlo?
 - con evento ACK_Click la lista viene aggiornata, sul datagrid vengono eliminate le righe cancellate in lista ma non cambia il colore delle righe che da lampeggianti devono diventare rosso fisso. qualche consiglio?

grazie 
C#
C#
Un linguaggio di programmazione orientato agli oggetti e indipendente dai tipi che ha le sue radici nella famiglia di linguaggi C e include il supporto per la programmazione orientata ai componenti.
11 domande
0 commenti Nessun commento
{count} voti

Risposta

Le risposte possono essere contrassegnate come risposte accettate dall'autore della domanda. Ciò consente agli utenti di sapere che la risposta ha risolto il problema dell'autore.