操作說明:將 Windows Forms 控制項繫結至 DBNull 資料庫值

當您將 Windows Form 控制項繫結至資料來源,且資料來源傳回 DBNull 值時,您可以替代為適當值,而不需處理、格式化或剖析事件。 在格式化或剖析資料來源值的時候,NullValue 屬性會轉換 DBNull 為指定的物件。

範例

下列範例示範如何在兩個不同的情況下繫結 DBNull 的值。 第一個範例示範如何為字串屬性設定 NullValue;第二個示範如何為影像屬性設定 NullValue


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace DBNullCS
{
    public class Form1 : Form
    {
        public Form1()
        {		
            this.Load += new EventHandler(Form1_Load);
        }

        // The controls and components we need for the form.
        private Button button1;
        private PictureBox pictureBox1;
        private BindingSource bindingSource1;
        private TextBox textBox1;
        private TextBox textBox2;

        // Data table to hold the database data.
        DataTable employeeTable = new DataTable();

        void Form1_Load(object sender, EventArgs e)
        {
            // Basic form setup.
            this.pictureBox1 = new PictureBox();
            this.bindingSource1 = new BindingSource();
            this.textBox1 = new TextBox();
            this.textBox2 = new TextBox();
            this.button1 = new Button();
            this.pictureBox1.Location = new System.Drawing.Point(20, 20);
            this.pictureBox1.Size = new System.Drawing.Size(174, 179);
            this.textBox1.Location = new System.Drawing.Point(25, 215);
            this.textBox1.ReadOnly = true;
            this.textBox2.Location = new System.Drawing.Point(25, 241);
            this.textBox2.ReadOnly = true;
            this.button1.Location = new System.Drawing.Point(200, 103);
            this.button1.Text = "Move Next";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            this.ClientSize = new System.Drawing.Size(292, 273);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.textBox2);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.pictureBox1);
            this.ResumeLayout(false);
            this.PerformLayout();

            // Create the connection string and populate the data table
            // with data.
            string connectionString = "Integrated Security=SSPI;" +
                "Persist Security Info = False;Initial Catalog=Northwind;" +
                "Data Source = localhost";
            SqlConnection connection = new SqlConnection();
            connection.ConnectionString = connectionString;
            SqlDataAdapter employeeAdapter =
                new SqlDataAdapter(new SqlCommand("Select * from Employees", connection));
            connection.Open();
            employeeAdapter.Fill(employeeTable);

            // Set the DataSource property of the BindingSource to the employee table.
            bindingSource1.DataSource = employeeTable;

           // Set up the binding to the ReportsTo column.
            Binding reportsToBinding = textBox2.DataBindings.Add("Text", bindingSource1,
                "ReportsTo", true);

            // Set the NullValue property for this binding.
            reportsToBinding.NullValue = "No Manager";

            // Set up the binding for the PictureBox using the Add method, setting
            // the null value in method call.
            pictureBox1.DataBindings.Add("Image", bindingSource1, "Photo", true,
                DataSourceUpdateMode.Never, new Bitmap(typeof(Button), "Button.bmp"));

            // Set up the remaining binding.
            textBox1.DataBindings.Add("Text", bindingSource1, "LastName", true);
        }

        // Move through the data when the button is clicked.
        private void button1_Click(object sender, EventArgs e)
        {
            bindingSource1.MoveNext();
        }

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }
    }
}
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Data.SqlClient
Imports System.Windows.Forms



Public Class Form1
    Inherits Form
    
    Public Sub New() 
    End Sub
    
    ' The controls and components we need for the form.
    Private WithEvents button1 As Button
    Private pictureBox1 As PictureBox
    Private bindingSource1 As BindingSource
    Private textBox1 As TextBox
    Private textBox2 As TextBox
    
    ' Data table to hold the database data.
    Private employeeTable As New DataTable()
    
    
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
        Handles Me.Load

        ' Basic form setup.
        Me.pictureBox1 = New PictureBox()
        Me.bindingSource1 = New BindingSource()
        Me.textBox1 = New TextBox()
        Me.textBox2 = New TextBox()
        Me.button1 = New Button()
        Me.pictureBox1.Location = New System.Drawing.Point(20, 20)
        Me.pictureBox1.Size = New System.Drawing.Size(174, 179)
        Me.textBox1.Location = New System.Drawing.Point(25, 215)
        Me.textBox1.ReadOnly = True
        Me.textBox2.Location = New System.Drawing.Point(25, 241)
        Me.textBox2.ReadOnly = True
        Me.button1.Location = New System.Drawing.Point(200, 103)
        Me.button1.Text = "Move Next"
        Me.ClientSize = New System.Drawing.Size(292, 273)
        Me.Controls.Add(Me.button1)
        Me.Controls.Add(Me.textBox2)
        Me.Controls.Add(Me.textBox1)
        Me.Controls.Add(Me.pictureBox1)
        Me.ResumeLayout(False)
        Me.PerformLayout()

        ' Create the connection string and populate the data table
        ' with data.
        Dim connectionString As String = "Integrated Security=SSPI;" & _
            "Persist Security Info = False;Initial Catalog=Northwind;" _
            & "Data Source = localhost"
        Dim connection As New SqlConnection()
        connection.ConnectionString = connectionString
        Dim employeeAdapter As New SqlDataAdapter _
            (New SqlCommand("Select * from Employees", connection))
        connection.Open()
        employeeAdapter.Fill(employeeTable)

        ' Set the DataSource property of the BindingSource to the employee table.
        bindingSource1.DataSource = employeeTable

        ' Set up the binding to the ReportsTo column.
        Dim reportsToBinding As Binding = _
            textBox2.DataBindings.Add("Text", bindingSource1, "ReportsTo", _
                True)

        ' Set the NullValue property for this binding.
        reportsToBinding.NullValue = "No Manager"

        ' Set up the binding for the PictureBox using the Add method, setting
        ' the null value in method call.
        pictureBox1.DataBindings.Add("Image", bindingSource1, "Photo", _
            True, DataSourceUpdateMode.Never, _
            New Bitmap(GetType(Button), "Button.bmp"))

        ' Set up the remaining binding.
        textBox1.DataBindings.Add("Text", bindingSource1, "LastName", True)

    End Sub
    
    
    ' Move through the data when the button is clicked.
    Private Sub button1_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles button1.Click

        bindingSource1.MoveNext()

    End Sub
    
    
    <STAThread()>  _
    Shared Sub Main() 
        Application.EnableVisualStyles()
        Application.Run(New Form1())
    
    End Sub
End Class

繫結屬性和 NullValue 屬性的類型都必須相同,否則會產生錯誤,將不會再進一步處理 NullValue 的值。 在此情況下,將不會擲回例外狀況。

編譯程式碼

這個範例需要:

  • System、System.Data、System.Drawing 和 System.Windows.Forms 組件的參考。

另請參閱