Compartilhar via


Como: Vincular controles Windows Forms para os valores do banco de dados de DBNull

Quando você vincular controles Windows Forms com uma fonte de dados e a fonte de dados retorna um DBNull valor, você pode substituir um valor apropriado sem tratamento, formatação, ou a análise de eventos. O NullValue irá converter a propriedade DBNull a um objeto especificado quando a formatação ou análise dos dados de origem valores.

Exemplo

O exemplo a seguir demonstra como vincular um DBNull valor em duas situações diferentes. O primeiro demonstra como definir o NullValue para uma propriedade de cadeia de caracteres; o segundo demonstra como definir o NullValue para uma propriedade da imagem.

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

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());
        }

    }
}

Os tipos de propriedade de vinculação e a NullValue a propriedade deve ser o mesmo ou ocorrerá um erro e não mais NullValue valores serão processadas. Nessa situação, uma exceção não será lançada.

Compilando o código

Este exemplo requer:

  • Referências aos assemblies do sistema, System. Data, System. Drawing e System.Windows.Forms.

Para obter informações sobre como criar este exemplo a partir da linha de comando para Visual Basic ou Visual C#, consulte Compilando a partir da linha de comando (Visual Basic) ou Comando -<>>linha criando com CSC. exe. Você também pode construir este exemplo no Visual Studio colando o código em um novo projeto. Para obter mais informações, consulte Como: Compilar e executar um exemplo de código Windows Forms concluída usando Visual Studio e Como: Compilar e executar um exemplo de código Windows Forms concluída usando Visual Studio e Como: Compilar e executar um exemplo de código Windows Forms concluída usando Visual Studio e Como: Compilar e executar um exemplo de código de formulários Windows concluída usando o Visual Studio e Como: Compilar e executar um exemplo de código de formulários de Windows completa usando Visual Studio e Como compilar e executar um exemplo de código dos Windows Forms concluído usando Visual Studio.

Consulte também

Tarefas

Como: Tratar erros e exceções que ocorrem com Databinding

Como: Ligar um controle Windows Forms a um tipo

Outros recursos

O Componente BindingSource