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开始的数据,只有一条数据。 效果图如下:

 


本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/09/06/2168440.html,如需转载请自行联系原作者

目录
相关文章
WPF—多重绑定和跨层级绑定
WPF—多重绑定和跨层级绑定
|
C# 数据格式 XML
WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)
原文:WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树) 一、WPF对象级(Window对象)资源的定义与查找 实例一: StaticR...
8441 0
|
C# 数据库
WPF中DataGrid控件绑定数据源
WPF中DataGrid控件绑定数据源
178 0
|
C#
WPF更新绑定字段
WPF更新绑定字段
105 0
|
前端开发 C#
WPF 之 数据与命令绑定 (MVVM方式)
WPF 之 数据与命令绑定 (MVVM方式)
197 0
WPF 之 数据与命令绑定 (MVVM方式)
|
C#
WPF 绑定父类属性
原文:WPF 绑定父类属性 1.绑定父控件的属性. 1 2 3 4 5 6 7 8 9 发现问题,父控件的属性如果是后期加载的,别如说Width或者Height不是固定的数值,那么绑定时没有效果的。
1279 0
|
C# 前端开发
wpf中的datagrid绑定操作按钮是否显示或者隐藏
如图,需要在wpf中的datagrid的操作那列有个确认按钮,然后在某些条件下确认按钮可见,某些情况下不可见的,放在mvc里直接在cshtml页面中if..else就行了。 但是在wpf里不行。。网上搜索了好久才找到解决方法,原来只是binding那个visiable属性就行了,
6896 0
|
C# .NET 开发框架
WPF笔记 ( xmlns引用,Resource、Binding 前/后台加载,重新绑定) 2013.6.7更新
原文:WPF笔记 ( xmlns引用,Resource、Binding 前/后台加载,重新绑定) 2013.6.7更新 1、xmlns Mapping URI的格式是 clr-namespace:[;assembly=] (1)如果自定义类和XAML处在同一个Assembly之中,只还需要提供clr-namespace值。
1452 0
|
C#
潜移默化学会WPF(难点控件treeview)--改造TreeView(CheckBox多选择版本),递归绑定数据
原文:潜移默化学会WPF(难点控件treeview)--改造TreeView(CheckBox多选择版本),递归绑定数据 目前自己对treeview的感慨很多 今天先讲 面对这种 表结构的数据 的其中一种绑定方法,后面多几列其他属性都没关系,例如多个字段, 1  A  0 2  B  0 3  C  0 4  D  1 5  E  2 6  F  4 7  G 1 .
2394 0
|
C# 容器 存储
WPF元素绑定
原文:WPF元素绑定 数据绑定简介:数据绑定是一种关系,该关系告诉WPF从源对象提取一些信息,并用这些信息设置目标对象的属性。目标属性是依赖项属性。源对象可以是任何内容,从另一个WPF元素乃至ADO.NET数据对象(如DataTable)或自行创建出数据对象。
877 0