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步。就會看到如下的結果。

 

 

 

4)  雖然實現了下拉框的內容顯示,但是卻存在一個問題,繼不顯示應該顯示的內容。最后查詢網絡之后才知道,應許做如下修改。

 

DataGrid的ComboBox列的綁定方式

 

  DataGridComboBoxColumn對數據源有下面的要求:

 使用下列選項之一,若要填充下拉列表,首先設置 ComboBox 的 ItemsSource 屬性:

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

  

1)  在使用DataGrid的時候,有時候需要使某些列為ComboBox,這時自然想到使用DataGridComboBoxColumn,但是如果使用的是ItemsSource數據綁定后台的對象,就會發現,這根本就不能用。

2)  默認刷新按鈕之后,下拉框中沒有數據。我仔細看了一下代碼,前台代碼中並沒有進行數據綁定,而且后台代碼中也沒寫綁定的語句。前台代碼如下。如果如下圖。

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM