,列名叫状态,显示电源设备的开关状态。

以下是示例代码:

XAML代码:

<Window x:Class="WpfApp1.MainWindow"
        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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal" Margin="10">
            <Button Content="添加行" Click="AddRow_Click"/>
            <Button Content="删除行" Click="DeleteRow_Click"/>
        </StackPanel>
        <DataGrid Grid.Row="1" x:Name="dataGrid" AutoGenerateColumns="False" CanUserAddRows="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="序号" Binding="{Binding Index}" IsReadOnly="True"/>
                <DataGridTemplateColumn Header="开始日期">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <DatePicker SelectedDate="{Binding StartDate, Mode=TwoWay}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="结束日期">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <DatePicker SelectedDate="{Binding EndDate, Mode=TwoWay}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="电源设备">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding PowerDevices}" SelectedItem="{Binding SelectedPowerDevice, Mode=TwoWay}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="端口号">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding SerialPorts}" SelectedItem="{Binding SelectedSerialPort, Mode=TwoWay}" PreviewMouseLeftButtonDown="SerialPorts_PreviewMouseLeftButtonDown"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="功率瓦数">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding PowerValues}" SelectedItem="{Binding SelectedPowerValue, Mode=TwoWay}" PreviewMouseLeftButtonDown="PowerValues_PreviewMouseLeftButtonDown" SelectionChanged="PowerValues_SelectionChanged"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTextColumn Header="泵温度" Binding="{Binding PumpTemperature, Mode=TwoWay}" Width="*">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="HorizontalAlignment" Value="Center"/>
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>
                <DataGridTextColumn Header="功率值" Binding="{Binding PowerValue, Mode=TwoWay}" Width="*">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="HorizontalAlignment" Value="Center"/>
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>
                <DataGridTemplateColumn Header="开关">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="{Binding SwitchButtonText}" Click="SwitchButton_Click"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="状态">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Image Source="{Binding PowerDeviceStatusImage}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

C#代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO.Ports;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;

namespace WpfApp1
{
    public partial class MainWindow : Window
    {
        private List<DataItem> dataItems = new List<DataItem>();
        private List<string> powerDevices = new List<string> { "设备1", "设备2", "设备3", "设备4", "设备5", "设备6", "设备7", "设备8", "设备9", "设备10", "设备11", "设备12", "设备13", "设备14", "设备15", "设备16", "设备17", "设备18", "设备19", "设备20" };
        private List<string> powerValues = new List<string> { "10", "20", "30", "40", "50", "60", "70", "80", "90", "100" };
        private List<string> serialPorts = new List<string>();
        private SerialPort serialPort;

        public MainWindow()
        {
            InitializeComponent();

            // 初始化串口列表
            serialPorts = SerialPort.GetPortNames().ToList();

            // 绑定数据
            dataGrid.ItemsSource = dataItems;
        }

        private void AddRow_Click(object sender, RoutedEventArgs e)
        {
            int index = dataItems.Count + 1;
            dataItems.Add(new DataItem(index, powerDevices, powerValues));
            RefreshIndex();
        }

        private void DeleteRow_Click(object sender, RoutedEventArgs e)
        {
            if (dataGrid.SelectedItems.Count > 0)
            {
                foreach (var item in dataGrid.SelectedItems)
                {
                    dataItems.Remove((DataItem)item);
                }
                RefreshIndex();
            }
        }

        private void RefreshIndex()
        {
            for (int i = 0; i < dataItems.Count; i++)
            {
                dataItems[i].Index = i + 1;
            }
        }

        private void SerialPorts_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            // 刷新串口列表
            serialPorts = SerialPort.GetPortNames().ToList();
            ComboBox comboBox = (ComboBox)sender;
            comboBox.ItemsSource = serialPorts;
        }

        private void PowerValues_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            ComboBox comboBox = (ComboBox)sender;
            DataItem dataItem = (DataItem)comboBox.DataContext;

            // 如果未选择电源设备,则提示先选择电源设备
            if (string.IsNullOrEmpty(dataItem.SelectedPowerDevice))
            {
                MessageBox.Show("请先选择电源设备!");
                return;
            }

            // 刷新功率瓦数列表
            powerValues = new List<string> { "10", "20", "30", "40", "50", "60", "70", "80", "90", "100" };
            if (dataItem.SelectedPowerDevice == "设备1")
            {
                powerValues = new List<string> { "10", "20", "30", "40", "50" };
            }
            else if (dataItem.SelectedPowerDevice == "设备2")
            {
                powerValues = new List<string> { "20", "40", "60", "80", "100" };
            }
            else if (dataItem.SelectedPowerDevice == "设备3")
            {
                powerValues = new List<string> { "30", "60", "90" };
            }
            comboBox.ItemsSource = powerValues;
        }

        private void PowerValues_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox comboBox = (ComboBox)sender;
            DataItem dataItem = (DataItem)comboBox.DataContext;

            // 更新功率值
            dataItem.PowerValue = comboBox.SelectedItem.ToString();
        }

        private void SwitchButton_Click(object sender, RoutedEventArgs e)
        {
            Button button = (Button)sender;
            DataItem dataItem = (DataItem)button.DataContext;

            // 更新电源设备状态
            if (dataItem.PowerDeviceStatus == PowerDeviceStatus.On)
            {
                dataItem.PowerDeviceStatus = PowerDeviceStatus.Off;
                dataItem.SwitchButtonText = "开";
                dataItem.PowerDeviceStatusImage = new BitmapImage(new Uri("pack://application:,,,/Images/off.png"));
            }
            else
            {
                dataItem.PowerDeviceStatus = PowerDeviceStatus.On;
                dataItem.SwitchButtonText = "关";
                dataItem.PowerDeviceStatusImage = new BitmapImage(new Uri("pack://application:,,,/Images/on.png"));
            }
        }
    }

    public class DataItem : INotifyPropertyChanged
    {
        private int index;
        private DateTime startDate;
        private DateTime endDate;
        private List<string> powerDevices;
        private string selectedPowerDevice;
        private List<string> powerValues;
        private string selectedPowerValue;
        private string pumpTemperature;
        private string powerValue;
        private PowerDeviceStatus powerDeviceStatus;
        private string switchButtonText;
        private BitmapImage powerDeviceStatusImage;

        public int Index
        {
            get { return index; }
            set
            {
                index = value;
                OnPropertyChanged("Index");
            }
        }

        public DateTime StartDate
        {
            get { return startDate; }
            set
            {
                startDate = value;
                OnPropertyChanged("StartDate");
            }
        }

        public DateTime EndDate
        {
            get { return endDate; }
            set
            {
                endDate = value;
                OnPropertyChanged("EndDate");
            }
        }

        public List<string> PowerDevices
        {
            get { return powerDevices; }
        }

        public string SelectedPowerDevice
        {
            get { return selectedPowerDevice; }
            set
            {
                selectedPowerDevice = value;
                OnPropertyChanged("SelectedPowerDevice");
            }
        }

        public List<string> PowerValues
        {
            get { return powerValues; }
        }

        public string SelectedPowerValue
        {
            get { return selectedPowerValue; }
            set
            {
                selectedPowerValue = value;
                OnPropertyChanged("SelectedPowerValue");
            }
        }

        public string PumpTemperature
        {
            get { return pumpTemperature; }
            set
            {
                pumpTemperature = value;
                OnPropertyChanged("PumpTemperature");
            }
        }

        public string PowerValue
        {
            get { return powerValue; }
            set
            {
                powerValue = value;
                OnPropertyChanged("PowerValue");
            }
        }

        public PowerDeviceStatus PowerDeviceStatus
        {
            get { return powerDeviceStatus; }
            set
            {
                powerDeviceStatus = value;
                OnPropertyChanged("PowerDeviceStatus");
            }
        }

        public string SwitchButtonText
        {
            get { return switchButtonText; }
            set
            {
                switchButtonText = value;
                OnPropertyChanged("SwitchButtonText");
            }
        }

        public BitmapImage PowerDeviceStatusImage
        {
            get { return powerDeviceStatusImage; }
            set
            {
                powerDeviceStatusImage = value;
                OnPropertyChanged("PowerDeviceStatusImage");
            }
        }

        public DataItem(int index, List<string> powerDevices, List<string> powerValues)
        {
            this.index = index;
            this.startDate = DateTime.Now;
            this.endDate = DateTime.Now;
            this.powerDevices = powerDevices;
            this.powerValues = powerValues;
            this.powerDeviceStatus = PowerDeviceStatus.Off;
            this.switchButtonText = "开";
            this.powerDeviceStatusImage = new BitmapImage(new Uri("pack://application:,,,/Images/off.png"));
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public enum PowerDeviceStatus
    {
        On,
        Off
    }
}
``
WPF C# 在datagrid里可以添加行每添加一行序号+1可以删除行有10列第一列是TextBlock列名叫序号第二、三列是DatePicker列名叫开始日期、结束日期第四列是ComboBox列名叫电源设备下拉框有20行从设备1~设备20第五列是ComboBox列名叫端口号有个PreviewMouseLeftButtonDown事件获取当前电脑的串口号第六列是ComboBox列名叫功率瓦数

原文地址: https://www.cveoy.top/t/topic/efI1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录