zoukankan      html  css  js  c++  java
  • WPF 绑定各种数据源之Datatable

    一、Binding是WPF的核心,WPF的数据源有以下几种:

      1、ADO.NET中的DataTable

      2、xml数据源

      3、object数据源

      4、元素控件属性

         

    二、WPF绑定各种数据源索引

    WPF 绑定各种数据源之Datatable

    WPF绑定各种数据源之object数据源

    WPF绑定各种数据源之xml数据源

    WPF绑定各种数据源之元素控件属性

    WPF 绑定基础

    三、这里做一些简单的实例。

    1.ListBox绑定Datatable数据源

    前台代码

        <ListBox Margin="12,32,12,329" ItemsSource="{Binding}" Name="listBox1">
                <ListBox.ItemTemplate>
                    <DataTemplate>           
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="0.5*"/>
                                <ColumnDefinition Width="0.5*"/>
                                <ColumnDefinition Width="0.5*"/>
                            </Grid.ColumnDefinitions>  
                            <TextBlock Text="{Binding Path=ID}"/>
                            <TextBlock  Text="{Binding Path=Name}"/>
                            <TextBlock Grid.Column="1" Text="{Binding Path=Age}" Background="{Binding Path=Age, Converter={StaticResource BackgroundConverter}}"/>
                        </Grid>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
    

    后台代码: 

           public Window1()
            {
                InitializeComponent();
                listBox1.DataContext = GetDataTable();
                //使用ItemsSource的形式
             //listBox1.ItemsSource = GetDataTable().DefaultView;
                listBox1.SelectedIndex = 0;
    
            }
    

      下面是创建DataTable数据源,当然也可以连接数据库获得数据源

        private DataTable  GetDataTable()
            {
                DataTable data = new DataTable("MyDataTable");
                
                DataColumn ID = new DataColumn("ID");//第一列
                ID.DataType = System.Type.GetType("System.Int32");
                //ID.AutoIncrement = true; //自动递增ID号 
                data.Columns.Add(ID);
    
                //设置主键
                DataColumn[] keys = new DataColumn[1];
                keys[0] = ID;
                data.PrimaryKey = keys;
    
                data.Columns.Add(new DataColumn("Name",typeof(string)));//第二列
                data.Columns.Add(new DataColumn("Age",typeof(string)));//第三列
    
                data.Rows.Add(1,"  XiaoM","  20");
                data.Rows.Add(2,"  XiaoF","  122");
                data.Rows.Add(3,"  XiaoA", "  29");
                data.Rows.Add(4,"  XiaoB", "  102");
                return data;
            }
    

      下面是类型转换

        public class BackgroundConverter : IValueConverter
        {
            #region IValueConverter Members
    
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                Color color = new Color();
                int num = int.Parse(value.ToString());
                if (num > 100)
                    color = Colors.Yellow;
                else if (num < 50)
                    color = Colors.LightGreen;
                else
                    color = Colors.LightPink;
                return new SolidColorBrush(color);
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
    
            #endregion
        }
    

      

     效果图:

    2、使用ListView的形式绑定DataTable数据源,数据源与第一个是一样的,不同的地方是:

    前台代码:

      <ListView Height="262" Margin="-12,0,12,39" VerticalAlignment="Bottom" ItemsSource="{Binding}" Name="listView2" HorizontalAlignment="Center">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="编号" DisplayMemberBinding="{Binding Path=ID}"  Width="100" />
                        <GridViewColumn Header="姓名" DisplayMemberBinding="{Binding Path=Name}" Width="100"/>
                        <GridViewColumn Header="年龄" Width="100">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Grid.Column="1" Text="{Binding Path=Age}" Foreground="{Binding Path=Age, Converter={StaticResource BackgroundConverter}}"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn> 
                   </GridView>
                </ListView.View>
            </ListView>
    

      

      后台代码:

      listView2.DataContext = GetDataTable().DefaultView;
    

      效果图:

    3、如果数据源已经是DataTable,则使用LINQ检索结果的形式为:

                DataTable dt = GetDataTable();
                listView2.ItemsSource =
                    from row in dt.Rows.Cast<DataRow>()
                    where Convert.ToString(row["Name"]).StartsWith("XiaoF")
                    select new Student()
                    {
                        ID = int.Parse(row["ID"].ToString()),
                        Name = row["Name"].ToString(),
                        Age = row["Age"].ToString()
                    };
    

    其它不变.上面的代码是检索Name以XiaoF开始的数据,只有一条数据。 效果图如下:

      

  • 相关阅读:
    弹性盒布局(Flexbox布局)
    CSS子元素在父元素中水平垂直居中的几种方法
    Vue中watch用法详解
    深入理解vue中的slot与slot-scope
    Spring 源码学习 03:创建 IoC 容器的几种方式
    Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念
    Spring 源码阅读环境的搭建
    DocView 现在支持自定义 Markdown 模版了!
    Dubbo 接口,导出 Markdown ,这些功能 DocView 现在都有了!
    线程池 ThreadPoolExecutor 原理及源码笔记
  • 原文地址:https://www.cnblogs.com/linlf03/p/2168440.html
Copyright © 2011-2022 走看看