DataGrid示例的後臺代碼數據庫
1) 經過Entity Framework 6.1 從數據庫(本地數據庫(local)/Test中的S_City表中讀取城市信息數據,從S_ Province表中讀取省份信息,而後經過綁定的方式反數據顯示到WPF的Window上的一個DataGrid上。具體代碼以下。網絡
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using WpfApp1.Models; namespace WpfApp1 { /// <summary> /// WindowGrid.xaml 的交互邏輯 /// </summary> public partial class WindowGrid : Window { public WindowGrid() { InitializeComponent(); Database.SetInitializer<TestDBContext>(null); } private void btnRefresh_Click(object sender, RoutedEventArgs e) { BindDrp(); GetData(); } TestDBContext db = new TestDBContext(); protected void GetData() { List<S_City> list = db.S_City.ToList<S_City>(); gridCitys.ItemsSource = list; } protected void BindDrp() { List<S_Province> list = db.S_Province.ToList<S_Province>(); cboProvince.ItemsSource = list; ProvinceList = list; } public List<S_Province> ProvinceList { get; set; } private void btnUpdate_Click(object sender, RoutedEventArgs e) { try { S_City city = (S_City)gridCitys.SelectedItem; city.DateUpdated = DateTime.Now; txtMsg.Text = city.ProvinceID + "//" + city.CityName; S_City modifyCity = db.S_City.Find(city.CityID); modifyCity = city; db.SaveChanges(); txtMsg.Text += "保存成功!"; } catch (Exception ex) { txtMsg.Text += ex.Message; } } } }
2) 寫完了上面的代碼以後,按F5,程序運行了起來,點「刷新」。你會看到以下結果。以下圖的結果。學習
3) DataGrid自動生成了一些列,而實際上咱們是不須要這些自動生成列的。因此須要把AutoGenerateColumns設爲False。再執行第2步。就會看到以下的結果。spa
4) 雖然實現了下拉框的內容顯示,可是卻存在一個問題,繼不顯示應該顯示的內容。最後查詢網絡以後才知道,應許作以下修改。3d
DataGrid的ComboBox列的綁定方式code
DataGridComboBoxColumn對數據源有下面的要求:對象
使用下列選項之一,若要填充下拉列表,首先設置 ComboBox 的 ItemsSource 屬性:blog
1) 在使用DataGrid的時候,有時候須要使某些列爲ComboBox,這時天然想到使用DataGridComboBoxColumn,可是若是使用的是ItemsSource數據綁定後臺的對象,就會發現,這根本就不能用。ip
2) 默認刷新按鈕以後,下拉框中沒有數據。我仔細看了一下代碼,前臺代碼中並無進行數據綁定,並且後臺代碼中也沒寫綁定的語句。前臺代碼以下。若是以下圖。ci
<DataGridComboBoxColumn ClipboardContentBinding="{x:Null}" Header="ProvinceID" SelectedValueBinding="{x:Null}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}"/>
3) 我對程序進行了一些修改,前臺代碼不作修改,仍是以下。
<DataGridComboBoxColumn x:Name="cboProvince" ClipboardContentBinding="{x:Null}" Header="ProvinceID" SelectedValueBinding="{x:Null}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}"/>
後臺代碼以下,進行了下拉框的綁定。
protected void BindDrp() { List<S_Province> list = db.S_Province.ToList<S_Province>(); cboProvince.ItemsSource = list; }
結果以下圖。綁定是成功了,可是不顯示我須要顯示的值。
4) 對前臺代碼進行了以下修改。對DataGridComboBoxColumn進行了綁定。而後F5,運行發現,下拉框的顯示是正常了,可是不論我怎麼改,DataGrid中的「ProvinceID」默認只是顯示空白,什麼也不顯示,以下圖。前臺代碼以下。
<DataGridComboBoxColumn x:Name="cboProvince" ClipboardContentBinding="{x:Null}" Header="ProvinceID" SelectedValuePath="ProvinceID" DisplayMemberPath="ProvinceName" SelectedItemBinding="{x:Null}" TextBinding="{Binding ProvinceName}"/>
5) 可是當我加載數據到DataGrid中時,ProvinceID列默認仍是爲空,並無顯示我想顯示的省份名稱這樣的數據。通過一番的查找與學習,最終把前臺代碼修改爲以下。這樣修改以後在DataGrid默認綁定數據以後,ProvinceID列達到了我想要的結果。以下圖。
<DataGridComboBoxColumn x:Name="cboProvince" ClipboardContentBinding="{x:Null}" Header="ProvinceID" SelectedValuePath="ProvinceID" SelectedValueBinding="{Binding Path=ProvinceID,UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="ProvinceName" SelectedItemBinding="{x:Null}" > </DataGridComboBoxColumn>