天天看點

18.DataGrid内綁定ComboBox和ListBox以及取值

  本章主要解決如何在DataGrid的行内綁定ComboBox和ListBox。在資料集方面,先建立一個城市實體類,這個實體類有3個屬性,分别是城 市名、城市區号、城市區縣集合。城市區縣集合是很多個區縣的集合,是以區縣類也是一個實體類包括2個屬性分别為區縣名和區縣值。在這裡城市類集合綁定到 DataGrid中,區縣類集合綁定到ComboBox和ListBox中。

        首先我們建立城市實體類和區縣實體類集合:

/// <summary> 

   /// 城市實體類 

   /// </summary> 

   public class City 

   { 

       private string cityName; 

       private string cityNum; 

       private List<Combo> comboboxList; 

       /// <summary> 

       /// 城市名 

       /// </summary> 

       public string CityName 

       { 

           get { return cityName; } 

           set { cityName = value; } 

       } 

       /// 城市電話區号 

       public string CityNum 

           get { return cityNum; } 

           set { cityNum = value; } 

       /// 城市區縣類集合 

       public List<Combo> ComboboxList 

           get { return comboboxList; } 

           set { comboboxList = value; } 

   } 

   /// <summary> 

   /// ComboBox需要綁定的類 

   public class Combo 

       private string name; 

       private string value; 

       /// 區縣名 

       public string Name 

           get { return name; } 

           set { name = value; } 

       /// 區縣值 

       public string Value 

           get { return this.value; } 

           set { this.value = value; } 

        然後我們在初始化城市類的集合List<>代碼如下:

//執行個體化City類集合 

List<City> cityList = new List<City>() 

new City() 

CityName="成都", 

CityNum="028", 

ComboboxList=new List<Combo>() 

new Combo(){ Name="武侯區", Value="28"}, 

new Combo(){ Name="青羊區", Value="281"}, 

new Combo(){ Name="成華區", Value="283"}, 

new Combo(){ Name="高新區", Value="282"}, 

new Combo(){ Name="金牛區", Value="284"} 

}, 

CityName="北京", 

CityNum="010", 

new Combo(){ Name="朝陽區", Value="10"}, 

new Combo(){ Name="海澱區", Value="103"}, 

new Combo(){ Name="崇文區", Value="104"}, 

new Combo(){ Name="豐台區", Value="105"}, 

new Combo(){ Name="東城區", Value="120"} 

}; 

         最後  this.ShowCityList.ItemsSource = cityList;将城市類集合綁定到DataGrid的ItemsSource上面。下面我們來觀看DataGrid的XAML代碼,在這裡主要是在 DataGrid的DataGridTemplateColumn.CellTemplate模闆下面添加DataTemplate資料模闆,在這個模闆 下面添加一個ComboBox或者ListBox控件,ComboBox和ListBox的ItemsSource綁定區縣類集合的 ComboboxList屬性( ItemsSource="{Binding ComboboxList}")。當然這樣綁定下來顯示的名稱是不正确的。是以ComboBox控件還需要添加 ComboBox.ItemTemplate模闆,此模闆内部在綁定一個TextBlock控件,此控件的Text屬性綁定區縣類的Name屬性 (Text="{Binding Name}")。

<sdk:DataGrid HorizontalAlignment="Left" AutoGenerateColumns="False" Margin="28,71,0,0" Name="ShowCityList" VerticalAlignment="Top" Height="271" Width="324" > 

<sdk:DataGrid.Columns> 

<sdk:DataGridTextColumn Header="城市" Binding="{Binding CityName}" IsReadOnly="True" Width="108"/> 

<sdk:DataGridTemplateColumn Header="區縣"> 

<sdk:DataGridTemplateColumn.CellTemplate> 

<DataTemplate> 

<ComboBox Width="80" Height="24" ItemsSource="{Binding ComboboxList}" SelectionChanged="ComboBox_SelectionChanged"> 

<ComboBox.ItemTemplate> 

<TextBlock Width="80" Text="{Binding Name}" ></TextBlock> 

</DataTemplate> 

</ComboBox.ItemTemplate> 

</ComboBox> 

</sdk:DataGridTemplateColumn.CellTemplate> 

</sdk:DataGridTemplateColumn> 

<sdk:DataGridTemplateColumn Header="區縣級别"> 

<ListBox Width="80" ItemsSource="{Binding ComboboxList}" > 

<ListBox.ItemTemplate> 

<TextBlock Width="80" Text="{Binding Name}"></TextBlock> 

</ListBox.ItemTemplate> 

</ListBox> 

</sdk:DataGrid.Columns> 

</sdk:DataGrid> 

        在ComboBox中,我添加了一個事件SelectionChanged="ComboBox_SelectionChanged"來捕捉當 ComboBox改變選項之後擷取ComboBox的值。下面請看ComboBox_SelectionChanged的事件處理代碼:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 

ComboBox combobox = sender as ComboBox; 

//選擇到的項轉化為類Combo。 

Combo combo = combobox.SelectedValue as Combo; 

MessageBox.Show(combo.Name+"的區号是:"+combo.Value); 

        注意:使用ComboBox.SelectedValue擷取到的是實體類Combo。

<a target="_blank" href="http://blog.51cto.com/attachment/201203/232411895.jpg"></a>

本文轉自程興亮 51CTO部落格,原文連結:http://blog.51cto.com/chengxingliang/821957