이 문서에서는 .NET Framework의 데이터 바인딩에 대한 개요를 제공합니다.
Microsoft는 .NET에서 데이터 바인딩 기능을 상당히 강화하여
프런트 엔드를 데이터 원본에 연결하는 강력한 옵션으로 데이터 바인딩을 만들었습니다.
저는 .NET Windows Forms 데이터 바인딩에 집중했습니다.
데이터 바인딩이란 무엇입니까?
데이터 바인딩은 DataSets, DataViews, Array 등의 datasource들을 비주얼 엘리먼트로 연결하기위해
.NET 프레임워크에서 제공하는 강력한 기능이다.
비주얼 엘리먼트로는 TextBox, Datagrid 등을 들 수 있는데
Two Connection(양방향)연결 이 형성되는데
datasource에 어떤 변화가 생기면 바로 비주얼 엘리먼트에 반영되게 된다.
반대의 경우도 마찬가지 이다

TextBox, Datagrid등의 양방향 연결을 설립 데이터 소스에 대한 모든 변경 사항이 시각적 요소에 즉시 반영되고 그 반대의 경우도 마찬가지입니다.
다음은 데이터 바인딩 개념에 대한 그래픽 설명입니다.
.NET 이전의 데이터 바인딩
이전 데이터 바인딩 모델에서 사용할 수 있는
데이터 소스는 일반적으로 데이터베이스로 제한되었습니다.
모든 DBMS 시스템은 GUI 애플리케이션을 구축하고
데이터에 신속하게 바인딩하는 데 도움이 되는 자체 API를 제공했습니다.
프로그래머는 데이터 바인딩 프로세스를 제어할 수 있는 유연성이 없었기 때문에
대부분의 개발자는 데이터 바인딩 사용을 기피했습니다.
.NET을 사용한 데이터 바인딩
.NET Framework는
데이터 바인딩에 대한 매우 유연하고 강력한 접근 방식을 제공하며
프로그래머가 전체 프로세스와 관련된 단계를 미세하게 제어할 수 있도록 합니다.
.NET의 가장 큰 개선 사항 중 하나는
.NET 서버 측 웹 컨트롤을 사용하여 웹 페이지에 데이터 바인딩을 도입한 것입니다.
따라서 데이터 기반 웹 애플리케이션 구축이 크게 간소화되었습니다.
이 문서에서는 .NET Windows Forms의 데이터 바인딩만 다룹니다.
데이터 바인딩의 장점
- .NET의 데이터 바인딩을 사용하여 데이터 기반 응용 프로그램을 빠르게 작성할 수 있습니다.
.NET 데이터 바인딩을 사용하면 빠른 실행으로 적은 수의 코드를 작성할 수 있지만
여전히 최상의 방법으로 작업을 완료할 수 있습니다. - .NET은 백그라운드에서 많은 데이터 바인딩 코드를 자동으로 작성하므로
(" Windows 생성 코드 " 섹션 에서 볼 수 있음 )
개발자는 기본 데이터 바인딩을 위한 코드를 작성하는 데 시간을 할애할 필요가 없지만
여전히 수정할 수 있는 유연성이 있습니다.
그가 원하는 모든 코드. 바인딩된 접근 방식과 바인딩되지 않은 방식의 이점을 모두 얻습니다. - 이벤트를 사용하여 데이터 바인딩 프로세스를 제어합니다.
이에 대해서는 기사 뒷부분에서 자세히 설명합니다.
데이터 바인딩의 단점
- 언바운드 또는 기존 방법을 사용하여 보다 최적화된 코드를 작성할 수 있습니다.
- 완전한 유연성은 제한 없는 접근 방식을 사용해야만 달성할 수 있습니다.
데이터 바인딩 개념
데이터 바인딩이 되려면
데이터 공급자와 데이터 소비자가 있어야 둘 사이에 동기화된 링크가 설정됩니다.
데이터 공급자는 데이터를 포함하고 데이터 소비자는 데이터 공급자가 노출한 데이터를 사용하여 표시합니다.
.NET은 가능한 데이터 공급자의 범위를 확장했습니다.
.NET에서 IList인터페이스 를 구현하는 모든 클래스 또는 구성 요소 는 유효한 DataSource.
구성 요소가 IList인터페이스를 구현하면 인덱스 기반 컬렉션으로 변환됩니다.
IListNET Framework에서 인터페이스 를 지원하는 일부 클래스 는 다음과 같습니다.
IList인터페이스 를 구현하는 모든 클래스 는 유효한 데이터 공급자입니다.
- Arrays
- DataColumn
- DataTable
- DataView
- DataSet
주의하시기 바랍니다 IList 인터페이스는 런타임에 바인딩을 수행 할 수 있습니다.
DataBinding디자인 타임에 지원 하려면 IComponent 인터페이스도 구현해야 합니다.
또한 DataReadersWindows Forms 에서는 바인딩할 수 없습니다 (웹 양식에서는 가능).
.NET Framework는 단순하고 복잡한 DataBinding을 지원합니다.
간단한 데이터 바인딩은 TextBoxes 와 같은 컨트롤에서 지원됩니다 .
단순 데이터 바인딩에서 컨트롤은 한 번에 하나의 데이터 값만 표시할 수 있습니다.
와 같은 컨트롤에서 지원하는 복잡한 데이터 바인딩에서는
DataGrid에서 둘 이상의 데이터 값을 DataSource표시할 수있습니다.
데이터 바인딩 중 Dataflow
dataflow컨트롤에서 데이터 소스에 대한 올바른 이해 는 매우 중요합니다.
아래 다이어그램은 dataflow관련된 개체 및 개체에 대한 개요를 제공합니다 .

.NET에서 컨트롤에는 .NET에 바인딩할 수 있는 많은 속성이 있을 수 있습니다 DataSource. 각 databound속성에는 연결된 Binding개체가 있습니다. 컨트롤에는 많은 Binding개체 가 있을 수 있으므로 컨트롤에는 ControlBindingsCollection 모든 Binding개체 의 컬렉션( 클래스 인스턴스 )이 있습니다. 또한 동일한 컨트롤의 다른 속성이 다른 datasources에 바인딩될 수 있음을 기억하십시오 .
각 Binding객체는 CurrencyManager 또는 a 와 대화 합니다 PropertyManager. CurrencyManager 그리고 PropertyManager 수업은 중요하기 때문에 약간의 설명이 필요합니다. CurrencyManager 및 PropertyManager 상기베이스 클래스로부터 파생된다 BindingManagerBase. BindingManagerBase 클래스 의 목적은 datasource와 컨트롤 간의 동시성을 유지하는 것 입니다. 두 클래스 중 인터페이스를 구현할 CurrencyManager 때 사용됩니다 . 이러한 예 는 A , , , 등을 간단뿐만 아니라 복잡한 바인딩을 위해 사용될 수있다. 그러나 가 사용자 정의 클래스의 인스턴스인 경우에 사용됩니다 . 의 속성이 객체에 의해 노출 된 속성에 바인딩됩니다.datasourceIList datasourceDataViewDataSetArrayList CurrencyManager PropertyManager datasourceControlPropertyManager 단순 데이터 바인딩에만 사용할 수 있습니다.
일반적으로 클래스가 a datasource가 되도록 하려면 CurrencyManager 클래스가 데이터 컨테이너일 때 사용해야 합니다 . 그러나 자신의 클래스에 의해 노출된 속성에 컨트롤을 바인딩하는 데 관심이 있는 경우 인터페이스 PropertyManager 를 구현할 필요가 없기 때문에 를 사용하는 것이 더 쉽습니다 IList .
양식에는 서로 다른 데이터 소스에 각각 바인딩되는 많은 컨트롤이 포함될 수 있으므로 CurrencyManager 및 PropertyManager 개체 를 관리하려면 클래스가 필요 합니다. 따라서 .NET의 각 Windows Form에는 BindingContext연결된 기본 개체가 있습니다. 그러나 언제든지 BindingContext양식에 더 많은 개체를 만들 수 있습니다 . BindingContext 객체의 모음입니다 CurrencyManager 및 PropertyManager 객체.
요약:
- 컨트롤에는 바인딩할 수 있는 많은 속성이 있을 수 있습니다.
- databound컨트롤의 각 속성에는 연결된 Binding개체가 있습니다.
- Binding컨트롤의 모든 개체 DataBindings 는 ControlBindingsCollection 클래스 의 인스턴스인 컨트롤의 속성에 포함됩니다 .
- 각 databinding개체는 CurrencyManager 또는 개체와 대화 PropertyManager 합니다.
- CurrencyManager 그리고 PropertyManager 으로부터 파생되는 BindingManagerBase클래스입니다.
- BindingContext객체의 모음입니다 CurrencyManager 및 PropertyManager 객체.
- 기본적으로 양식에는 하나의 BindingContext 개체 가 포함 됩니다. 더 많은 BindingManagerBase 개체를 만들고 BindingContext컬렉션에 추가할 수 있습니다 .
- 각 CurrencyManager 또는 개체 당 PropertyManager 하나씩 데이터 액세스를 캡슐화 합니다.datasourceBindingContext
데이터 바인딩 제어
및 클래스가 이벤트를 지원 databinding하기 때문에 .NET 의 진정한 유연성과 기능 이 실현 됩니다. 이를 통해 과(와) 간에 전달되는 데이터를 변경할 수 있습니다 .BindingBindingManagerBaseControldatasource
아래 그림을 간단히 살펴보면 이 동작을 이해하는 데 도움이 됩니다

위의 다이어그램은 및 클래스에서 databinding생성된 이벤트를 사용하여 .NET Windows Forms 를 유연하게 만든 방법을 보여줍니다 .BindingBindingManagerBase
Binding객체는 두 개의 이벤트를 노출 : Format와 Parse. Format이벤트가 두 번 트리거됩니다. 우선, 데이터가에서 푸시 될 때 datasource받는 control이 경우 상기 두 번째 datasource변경된 데이터가 갱신된다 control. 구문 분석 이벤트는 데이터가에서 가져온 경우 일단 트리거 control받는 datasource.
Currency Manager( BindingManagerBase 클래스 에서 파생됨 )는 CurrentChanged, PositionChanged 및 ItemChanged. CurrentChanged 경계 값이 변경되면 트리거됩니다. PositionChangedposition 속성이 변경 ItemChanged되면 트리거되고 현재 항목이 변경되면 트리거됩니다. 주의하십시오 그 PropertyManager클래스 만 지원 2 이벤트 : CurrentChanged, PositionChanged.
이러한 이벤트를 통해 사용자 dataflow는 컨트롤에서 컨트롤로 datasource또는 그 반대로 미세하게 제어할 수 있습니다 .
Binding수업 의 이벤트를 이해하는 데 도움이 될 예를 들어 보겠습니다 . 이 문제는 실제로 내가 databinding이 기사 의 복잡성 과 그에 따른 동기에 대해 배우는 데 관심을 갖게 된 이유였습니다 . 문제는 내가 바인딩하려고 할 때 온 datetime로모그래퍼 SQLSERVER에서 필드 text의 특성 textbox control. SqlServer 저장소는 날짜를 " MM/dd/yyyy hh:mm:ss" 형식으로 저장하므로 날짜 textbox와 함께 시간이 표시됩니다. 디스플레이에서 시간 부분을 제거하려고 해도 제거할 수 없었습니다. 그러던 중 Binding수업 의 이벤트를 접하게 되었는데 이벤트를 활용한 솔루션이 굉장히 쉽고 우아했습니다.
'The binding object must be declared with the keyword "WithEvents" in order
'for us to be able to use the format and parse events.
Dim WithEvents oBinding As Binding
Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
'A new binding object declared above using "WithEvents" is explicitly
'created that binds the text field to the "GetDateTime" property of the
'MyDateTime class. The binding object is then added to the textbox's
'databindings collection.
oBinding = New Binding("Text", oDt, "GetDateTime")
txt1.DataBindings.Add(oBinding)
'Here, the binding object is not explicitly created and hence
'no events will triggered and the datetime is displayed in
' "MM/dd/yyyy hh:mm:ss"
'format only.
txt2.DataBindings.Add("Text", oDt, "GetDateTime")
End Sub
'This event is triggered right before the txt1's text field displays the
'datetime value that itobtains from oDt object (the datasource). Here, we
'have changed the format of display to "MM/dd/yy" although the actual
'data pulled from oDt is in "MM/dd/yyyy hh:mm:ss" format.
Private Sub oBinding_Format(ByVal sender As Object, ByVal e
As System.Windows.Forms.ConvertEventArgs) Handles oBinding.Format
e.Value = Format(e.Value, "MM/dd/yy")
End Sub
이 예에는 두 개의 textboxes가 있습니다.
하나는 내 사용자 정의 클래스 개체의 datetime 속성에 암시적으로 바인딩되고
다른 하나는 바인딩 WithEvents중에 생성된 이벤트를 처리하여
데이터 표시를 제어할 수 있도록 " " 키워드로 선언된 바인딩 개체를 사용하여 명시적으로 바인딩됩니다. .
또한 샘플 코드는 자신의 클래스를 컨트롤에 바인딩하는 방법에 대한 좋은 예를 제공합니다.
- 내 클래스를 사용하는 이유 datasource는 SQL Server 데이터베이스 datetime열에 대한 종속성을 피하고 따라서 예제를 자체 포함하도록 만들기 위한 것입니다. 그러나 datasourceSQL Server 데이터베이스에서 데이터를 채울 때 동일한 코드를 적용하여 데이터 형식을 지정할 수 있습니다 . 이벤트 사용 방법에 대한 이해를 돕기 위해 샘플 코드를 참조하십시오.
[출처] https://www.codeproject.com/Articles/3665/Data-Binding-Concepts-in-NET-Windows-Forms
Data Binding Concepts in .NET Windows Forms
A detailed look at the concepts involved in data binding and controlling data binding...
www.codeproject.com
댓글