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/
欢迎任何形式的转载,未经作者同意,请保留此段声明!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值