WPF.DataGrid测试_ZC

环境:Win7x64、vs2017

 

参考网址:

  WPF入门教程系列二十一——DataGrid示例(一) - DotNet菜园 - 博客园.html(https://www.cnblogs.com/chillsrc/p/4881724.html

  WPF入门教程系列二十二——DataGrid示例(二) - DotNet菜园 - 博客园.html(https://www.cnblogs.com/chillsrc/p/4898061.html

1、运行起来的界面样子:

 

 

2、界面源码:(ZC:这个 看个大概吧,可能不全,但是 DataGrid部分应该是全的)

<Window
        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:WpfUI_01"
        xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic" x:Class="WpfUI_01.MainWindow"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
   
    <Grid>
        
        <DataGrid x:Name="datagridTest1" HorizontalAlignment="Left" Height="363" Margin="195,10,0,0" VerticalAlignment="Top" Width="587" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding strTC0}" ClipboardContentBinding="{x:Null}" Header="TextColumn0"/>
                <DataGridTextColumn Binding="{Binding strTC1}" ClipboardContentBinding="{x:Null}" Header="TC1"/>
                <DataGridTextColumn Binding="{Binding strTC2}" ClipboardContentBinding="{x:Null}" Header="TC2"/>
                <DataGridTextColumn Binding="{Binding strTC3}" ClipboardContentBinding="{x:Null}" Header="TC3"/>
                <DataGridTextColumn Binding="{Binding strTC4}" ClipboardContentBinding="{x:Null}" Header="TC4"/>
                <DataGridComboBoxColumn x:Name="datagrid_comboboxcolumn" ClipboardContentBinding="{x:Null}" Header="ComboboxColumn"
                                        SelectedValueBinding="{Binding Path=strTC2, UpdateSourceTrigger=PropertyChanged}"
                                        SelectedItemBinding="{x:Null}"
                                        SelectedValuePath="strCC2" DisplayMemberPath="strCC1"/>
            </DataGrid.Columns>
            <!--TextBinding="{Binding strCC1}" 这也是“DataGrid.Columns”的一个属性-->
        </DataGrid>
        <Button x:Name="btnUpdate" Content="Update" HorizontalAlignment="Left" Margin="10,196,0,0" VerticalAlignment="Top" Width="75"/>
        <Button x:Name="btnRefresh" Content="Refresh" HorizontalAlignment="Left" Margin="10,221.686,0,0" VerticalAlignment="Top" Width="75" Click="BtnRefresh_Click"/>
    </Grid>
</Window>

  ZC:在设置 DataGrid的属性SelectedValueBinding 的时候,vs的“输出”界面 一直报错 我是这样设置的:“SelectedValueBinding="{Binding Path=strCC2, UpdateSourceTrigger=PropertyChanged}"”,实际上 这里的 Binding 是指 绑定 别的列 ! ! !... 改成 strTC2(即 列"TC2") 就OK了。  ZC:这是在做 关联:列"TC2" 的值 与 列"ComboboxColumn"中的属性"SelectedValuePath"的值  关联起来。

  ZC:这个 弄了一下午,怎么也想不到 "ComboboxColumn"的"SelectedValueBinding"属性 是在和别的列做 Binding !!!...(其实 也不能理解成别的列,假如 strTC2 没有相关的列显示的话  应该照样是可以 绑定的)

 

 

3、代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

using System.Collections;
using System.Collections.ObjectModel;

namespace WpfUI_01
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        public struct TextColumn
        {
            // ZC: 这里 一定要写成“{ get; set; }”的形式,写成“public string strTC0;”的话,DataGrid就会找不到成员...!!!
            // ZC: 用了“{ get; set; }” 的话,就只能 new 出来用了?
            public string strTC0 { get; set; }
            public string strTC1 { get; set; }
            public string strTC2 { get; set; }
            public string strTC3 { get; set; }
            public string strTC4 { get; set; }
        };

        public struct ComboboxColumn
        {
            public string strCC0 { get; set; }
            public string strCC1 { get; set; }
            public string strCC2 { get; set; }
        };

        //ObservableCollection<TextColumn> FlistTC = new ObservableCollection<TextColumn>();
        List<TextColumn> FlistTC = new List<TextColumn>();
        List<ComboboxColumn> FlistCC = new List<ComboboxColumn>();

        private void BtnRefresh_Click(object sender, RoutedEventArgs e)
        {
            ComboboxColumn cbc = new ComboboxColumn();
            for (int i = 0; i < 5; i++)
            {
                cbc.strCC0 = "cc0_" + i;
                cbc.strCC1 = "cc1_" + i;
                cbc.strCC2 = "tc2_" + i;
                FlistCC.Add(cbc);
            }
            datagrid_comboboxcolumn.ItemsSource = FlistCC;

            // {Binding Path=strCC0,UpdateSourceTrigger=PropertyChanged}

        // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

            //MessageBox.Show("A");
            TextColumn tc = new TextColumn();
            for (int i = 0; i < 5; i++)
            {
                tc.strTC0 = "tc0_" + i;
                tc.strTC1 = "tc1_" + i;
                tc.strTC2 = "tc2_" + i;
                tc.strTC3 = "tc3_" + i;
                tc.strTC4 = "tc4_" + i;
                FlistTC.Add(tc);
            }

            datagridTest1.ItemsSource = FlistTC;
            //datagridTest1.DataContext = FlistTC;

            //for (int i = 0; i < FlistTC.ToArray().Length; i++)
            //{
            //    Console.WriteLine(FlistTC.ElementAt<TextColumn>(i).strTC0);
            //}

            
        }

    }
}

 

 3.1、

  

  ZC:从上面的图 应该可以看出 属性"DisplayMemberPath" 指明的就是  用哪个成员变量的信息来显示(别的 成员信息 不用于显示,用于 Binding等 别的用处)。

  ZC:如果 想用 strCC0 + strCC1 的值 来用于显示的话 怎么配置?  如果想用 strCC0 + strCC1 来用于Binding的话 又该怎么配置??

4、

5、

 

posted @ 2019-07-02 16:16  csskill  阅读(245)  评论(0编辑  收藏  举报