天天看點

Silverlight實用竅門系列:18.DataGrid内綁定ComboBox和ListBox以及取值【附帶源碼執行個體】

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

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

Silverlight實用竅門系列:18.DataGrid内綁定ComboBox和ListBox以及取值【附帶源碼執行個體】

/// <summary>

/// 城市實體類

/// </summary>

public class City

{

private string cityName;

private string cityNum;

private List<Combo> comboboxList;

/// 城市名

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; }

/// 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; }

Silverlight實用竅門系列:18.DataGrid内綁定ComboBox和ListBox以及取值【附帶源碼執行個體】

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

Silverlight實用竅門系列:18.DataGrid内綁定ComboBox和ListBox以及取值【附帶源碼執行個體】

//執行個體化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"}

};

Silverlight實用竅門系列:18.DataGrid内綁定ComboBox和ListBox以及取值【附帶源碼執行個體】

         最後  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}")。

Silverlight實用竅門系列:18.DataGrid内綁定ComboBox和ListBox以及取值【附帶源碼執行個體】

<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>

Silverlight實用竅門系列:18.DataGrid内綁定ComboBox和ListBox以及取值【附帶源碼執行個體】

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

Silverlight實用竅門系列:18.DataGrid内綁定ComboBox和ListBox以及取值【附帶源碼執行個體】

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);

Silverlight實用竅門系列:18.DataGrid内綁定ComboBox和ListBox以及取值【附帶源碼執行個體】

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

Silverlight實用竅門系列:18.DataGrid内綁定ComboBox和ListBox以及取值【附帶源碼執行個體】

    本文轉自程興亮部落格園部落格,原文連結:http://www.cnblogs.com/chengxingliang/archive/2011/03/03/1969824.html,如需轉載請自行聯系原作者