首頁 > 軟體

Winform專案中TextBox控制元件DataBindings屬性

2022-02-26 13:00:17

DataBindings屬性是很多控制元件都有的屬性,作用有2方面。一方面是用於與資料庫的資料進行繫結,進行資料顯示。另一方面用於與控制元件或類的物件進行資料繫結。這裡主要關注後者。主要用法是將某個物件的某個屬性與指定物件的指定屬性進行關聯.

Label、TextBox等都包含DataBindings屬性,其型別為ControlBindingsCollection,是Binding類的集合。Binding類代表某物件屬性值和某控制元件屬性值之間的簡單系結。如可以將TextBox的Text屬性值繫結到Label的Text屬性值,這樣,當TextBox中的文字被修改的時候,Label的文字也會及時進行修改,如下面的程式碼所示:

Label1.DataBindings.Add("Text",TextBox1,"Text");

Binding類除了可以將物件的屬性繫結到控制元件的屬性之外,還可以將物件列表中當前物件的屬性值繫結到控制元件的屬性。

當使用Binding的建構函式建立範例時,必須指定三項內容:

  • 要繫結到的控制元件屬性的名稱
  • 資料來源
  • 資料來源中解析為列表或屬性的導航路徑

其中,資料來源可以為:

  • 實現 IBindingList 或 ITypedList 的任何類。包括:DataSet、DataTable、DataView 或 DataViewManager。 
  • 實現 IList 的任意索引集合類。(必須在建立 Binding 之前建立和填充該集合,並且列表中的所有物件必須為同一型別,否則將引發異常) 
  • 強型別物件的強型別 IList。

導航路徑可以為空字串(預設將呼叫資料來源的ToString()方法)、單個屬性名稱或用點分隔的名稱層次結構。

名稱層次結構是什麼意思呢?比如我們有一個Company類,它包含Name屬性和Employees屬性(公司所有Employee的集合),而Employee類又包含Name屬性。那麼,如果要將Company的Name屬性繫結到TextBox控制元件的Text屬性,程式碼為:

TextBox1.DataBindings.Add("Text", company, "Name");

如果要繫結Employees的Name屬性,程式碼為:

TextBox1.DataBindings.Add("Text", company, "Employees.Name");

Employess.Name即為用點分隔的名稱層次結構。在這裡,Employees為一個集合,將Employees.Name繫結到TextBox會出現什麼情況呢?測試後可知,TextBox將顯示Employees集合中第一個Employee的Name屬性。

範例:

介面

程式碼實現:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DataBindingsDemo
{
    public partial class FrmDataBindings : Form
    {
        public FrmDataBindings()
        {
            InitializeComponent();
        }

        private void FrmDataBindings_Load(object sender, EventArgs e)
        {
            //繫結到DataTable
            DataTable dtSource = GetDataTable();
            this.textBox1.DataBindings.Add("Text", dtSource, "StudentNo");
            this.textBox2.DataBindings.Add("Text", dtSource, "StudentName");
            this.textBox3.DataBindings.Add("Text", dtSource, "Sex");

            //繫結到實體物件
            Student stu = new Student() { StudentNo=2,StudentName="測試2",Sex="女"};
            //必須是繫結到物件的屬性(此例中繫結到StudentNo,而不是student),
            this.textBox4.DataBindings.Add("Text", stu, "StudentNo");
            this.textBox5.DataBindings.Add("Text", stu, "StudentName");
            this.textBox6.DataBindings.Add("Text", stu, "Sex");
        }

        private DataTable GetDataTable()
        {
            DataTable dt = new DataTable();
            DataColumn dcNo = new DataColumn("StudentNo", typeof(Int32));
            DataColumn dcName = new DataColumn("StudentName", typeof(string));
            DataColumn dcSex = new DataColumn("Sex", typeof(string));
            dt.Columns.Add(dcNo);
            dt.Columns.Add(dcName);
            dt.Columns.Add(dcSex);
            dt.Rows.Add(new object[] { 1,"測試","男"});
            return dt;
        }
    }

    public class Student
    {
        private int studentNo;

        public int StudentNo
        {
            get { return studentNo; }
            set { studentNo = value; }
        }

        private string studentName;

        public string StudentName
        {
            get { return studentName; }
            set { studentName = value; }
        }

        private string sex;

        public string Sex
        {
            get { return sex; }
            set { sex = value; }
        }
    }
}

執行效果:

到此這篇關於Winform專案中TextBox控制元件DataBindings屬性的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com