문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

방법: 데이터 바인딩에서 발생하는 오류 및 예외 처리

 

기본 비즈니스 개체를 컨트롤에 바인딩할 때 종종 해당 개체에서 예외와 오류가 발생합니다.  이들 오류와 예외를 가로채고 특정 Binding, BindingSource 또는 CurrencyManager 구성 요소에 대한 BindingComplete 이벤트를 처리하여 오류 정보를 복구하거나 사용자에게 전달할 수 있습니다.  

예제

이 코드 예제에서는 데이터 바인딩 작업 중에 발생하는 오류와 예외를 처리하는 방법을 보여 줍니다.   Binding 개체의 Binding.BindingComplete 이벤트를 처리하여 오류를 가로채는 방법을 보여 줍니다.  이 이벤트를 처리하여 오류와 예외를 가로채려면 바인딩 서식 지정을 사용하도록 설정해야 합니다.  바인딩이 생성되거나 바인딩 컬렉션에 추가될 때 서식 지정을 사용하도록 설정하거나 FormattingEnabled 속성을 true로 설정하여 사용하도록 설정합니다.  

using System;
using System.Drawing;
using System.Windows.Forms;

class Form1 : Form
{
	private BindingSource BindingSource1 = new BindingSource();
	private TextBox textBox1 = new TextBox();
	private TextBox textBox2 = new TextBox();
	private TextBox textBox3 = new TextBox();

	public Form1()
	{
		//Set up the textbox controls.
		this.textBox1.Location = new System.Drawing.Point(82, 13);
		this.textBox1.TabIndex = 1;
		this.textBox2.Location = new System.Drawing.Point(81, 47);
		this.textBox2.TabIndex = 2;
		this.textBox3.Location = new System.Drawing.Point(81, 83);
		this.textBox3.TabIndex = 3;

		// Add the textbox controls to the form
		this.Controls.Add(this.textBox2);
		this.Controls.Add(this.textBox1);
		this.Controls.Add(this.textBox3);

		// Handle the form's Load event.
		this.Load += new System.EventHandler(this.Form1_Load);
	}
	Binding partNameBinding;
	Binding partNumberBinding;

	private void Form1_Load(object sender, EventArgs e)
	{
		// Set the DataSource of BindingSource1 to the Part type.
		BindingSource1.DataSource = typeof(Part);

		// Bind the textboxes to the properties of the Part type, 
		// enabling formatting.
		partNameBinding = textBox1.DataBindings.Add("Text",
			BindingSource1, "PartName", true);

		partNumberBinding = textBox2.DataBindings.Add("Text", BindingSource1, "PartNumber",
			true);

		//Bind the textbox to the PartPrice value with currency formatting.
		textBox3.DataBindings.Add("Text", BindingSource1, "PartPrice", true,
			DataSourceUpdateMode.OnPropertyChanged, 0, "C");


		// Handle the BindingComplete event for BindingSource1 and 
		// the partNameBinding.
		partNumberBinding.BindingComplete +=
			new BindingCompleteEventHandler(partNumberBinding_BindingComplete);
		partNameBinding.BindingComplete +=
			new BindingCompleteEventHandler(partNameBinding_BindingComplete);

		// Add a new part to BindingSource1.
		BindingSource1.Add(new Part("Widget", 1234, 12.45));
	}

	// Handle the BindingComplete event to catch errors and exceptions 
	// in binding process.
	void partNumberBinding_BindingComplete(object sender,
		BindingCompleteEventArgs e)
	{
		if (e.BindingCompleteState != BindingCompleteState.Success)
			MessageBox.Show("partNumberBinding: " + e.ErrorText);
	}		

	// Handle the BindingComplete event to catch errors and 
	// exceptions in binding process.
	void partNameBinding_BindingComplete(object sender,
		BindingCompleteEventArgs e)
	{
		if (e.BindingCompleteState != BindingCompleteState.Success)
			MessageBox.Show("partNameBinding: " + e.ErrorText);
	}

	[STAThread]
	static void Main()
	{
		Application.EnableVisualStyles();
		Application.Run(new Form1());
	}
}

// Represents a business object that throws exceptions when invalid values are
// entered for some of its properties.
public class Part
{
	private string name;
	private int number;
	private double price;

	public Part(string name, int number, double price)
	{
		PartName = name;
		PartNumber = number;
		PartPrice = price;
	}

	public string PartName
	{
		get { return name; }
		set
		{
			if (value.Length <= 0)
				throw new Exception("Each part must have a name.");
			else
				name = value;
		}
	}
	public double PartPrice
	{
		get { return price; }
		set { price = value; }
	}

	public int PartNumber
	{
		get { return number; }
		set
		{
			if (value < 100)
				throw new Exception("Invalid part number." +
					" Part numbers must be greater than 100.");
			else
				number = value;
		}
	}
}

코드가 실행 중일 때 부분 이름으로 빈 문자열이 입력되거나 부분 숫자로 100보다 작은 값이 입력되면 메시지 상자가 표시됩니다.  이들 텍스트 상자 바인딩에 대한 Binding.BindingComplete 이벤트를 처리한 결과로 나타나는 것입니다.  

코드 컴파일

이 예제에는 다음 사항이 필요합니다.

  • System, System.Drawing 및 System.Windows.Forms 어셈블리에 대한 참조

명령줄에서 Visual Basic 또는 Visual C#용으로 이 예제를 빌드하는 방법에 대한 자세한 내용은 명령줄에서 빌드(Visual Basic) 또는 csc.exe를 사용한 명령줄 빌드를 참조하세요.  Visual Studio에서 코드를 새 프로젝트에 붙여넣어 이 예제를 빌드할 수도 있습니다.   방법: Visual Studio를 사용하여 전체 Windows Forms 코드 예제 컴파일 및 실행을 참조하세요.  

표시: