WPF入門教程系列二十二——DataGrid示例(二)

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

  • 一、靜態資源。有關更多信息,請參見 StaticResource 標記擴展。
  • 二、x: 靜態代碼實體。有關更多信息,請參見 x:Static 標記擴展。
  • 三、ComboBoxItem 類型的內聯集合。

  

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>

 

 

相關文章
相關標籤/搜索