ObjectDataSource.DataObjectTypeName Propriedade

Definição

Obtém ou define o nome de uma classe que controle o ObjectDataSource usa para um parâmetro em uma atualização, inserção ou exclusão da operação de dados, em vez de passar valores individuais do controle associado a dados.

public:
 property System::String ^ DataObjectTypeName { System::String ^ get(); void set(System::String ^ value); };
public string DataObjectTypeName { get; set; }
member this.DataObjectTypeName : string with get, set
Public Property DataObjectTypeName As String

Valor da propriedade

String

Um nome de classe parcial ou totalmente qualificado que identifica o tipo do objeto que o ObjectDataSource pode usar como um parâmetro para uma operação Insert(), Update() ou Delete(). O padrão é uma cadeia de caracteres vazia ("").

Exemplos

A seção contém dois exemplos de código. O primeiro exemplo de código demonstra como implementar um tipo que combina todos os valores de parâmetro em um objeto, usando a DataObjectTypeName propriedade. O segundo exemplo de código mostra a página da Web que usa as duas classes usadas no primeiro exemplo de código.

O exemplo de código a seguir demonstra como implementar um tipo que combina todos os valores de parâmetro em um objeto, usando a DataObjectTypeName propriedade. O método select da AggregateData classe retorna um DataTable objeto com duas colunas nomeadas Name e Number. Da mesma forma, a NewData classe define duas propriedades Name de leitura/gravação e Number. O Insert método da AggregateData classe usa um parâmetro do tipo NewData. A TypeName propriedade do ObjectDataSource é definida AggregateData como e a DataObjectTypeName propriedade é definida como NewData.

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Samples.AspNet.CS
{

    /// <summary>
    /// Summary description for AggregateData
    /// </summary>
    public class AggregateData
    {

        public AggregateData()
        {
        }

        static DataTable table;

        private DataTable CreateData()
        {
            table = new DataTable();
            table.Columns.Add("Name", typeof(string));
            table.Columns.Add("Number", typeof(int));
            table.Rows.Add(new object[] { "one", 1 });
            table.Rows.Add(new object[] { "two", 2 });
            table.Rows.Add(new object[] { "three", 3 });
            return table;
        }

        public DataTable Select()
        {
            if (table == null)
            {
                return CreateData();
            }
            else
            {
                return table;
            }
        }

        public int Insert(NewData newRecord)
        {
            table.Rows.Add(new object[] { newRecord.Name, newRecord.Number });
            return 1;
        }
    }

    public class NewData
    {
        private string nameValue;
        private int numberValue;

        public string Name
        {
            get { return nameValue; }
            set { nameValue = value; }
        }

        public int Number
        {
            get { return numberValue; }
            set { numberValue = value; }
        }
    }
}
Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls

Namespace Samples.AspNet.VB

    Public Class AggregateData

        Public Sub New()
        End Sub

        Shared table As DataTable

        Private Function CreateData() As DataTable
            table = New DataTable()
            table.Columns.Add("Name", GetType(String))
            table.Columns.Add("Number", GetType(Integer))
            table.Rows.Add(New Object() {"one", 1})
            table.Rows.Add(New Object() {"two", 2})
            table.Rows.Add(New Object() {"three", 3})
            Return table
        End Function

        Public Function SelectMethod() As DataTable
            If table Is Nothing Then
                Return CreateData()
            Else
                Return table
            End If
        End Function


        Public Function Insert(ByVal newRecord As NewData) As Integer

            table.Rows.Add(New Object() {newRecord.Name, newRecord.Number})
            Return 1
        End Function
    End Class


    Public Class NewData

        Private nameValue As String
        Private numberValue As Integer

        Public Property Name() As String
            Get
                Return nameValue
            End Get
            Set(ByVal value As String)
                nameValue = value
            End Set
        End Property

        Public Property Number() As Integer
            Get
                Return numberValue
            End Get
            Set(ByVal value As Integer)
                numberValue = value
            End Set
        End Property
    End Class
End Namespace

O exemplo de código a seguir mostra a página da Web que usa as duas classes usadas no exemplo de código anterior.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ObjectDataSource - DataObjectTypeName Property Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DetailsView 
            ID="DetailsView1" 
            runat="server" 
            AllowPaging="True" 
            AutoGenerateInsertButton="True"
            DataSourceID="ObjectDataSource1" 
            Height="50px" 
            Width="125px">
        </asp:DetailsView>
        <asp:ObjectDataSource 
            ID="ObjectDataSource1" 
            runat="server" 
            DataObjectTypeName="Samples.AspNet.CS.NewData"
            InsertMethod="Insert" 
            SelectMethod="Select" 
            TypeName="Samples.AspNet.CS.AggregateData">
        </asp:ObjectDataSource>
    </div>
    </form>
</body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %>
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ObjectDataSource - DataObjectTypeName Property Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DetailsView 
            ID="DetailsView1" 
            runat="server" 
            AllowPaging="True" 
            AutoGenerateInsertButton="True"
            DataSourceID="ObjectDataSource1" 
            Height="50px" 
            Width="125px">
        </asp:DetailsView>
        <asp:ObjectDataSource 
            ID="ObjectDataSource1" 
            runat="server" 
            DataObjectTypeName="Samples.AspNet.VB.NewData"
            InsertMethod="Insert" 
            SelectMethod="SelectMethod" 
            TypeName="Samples.AspNet.VB.AggregateData">
        </asp:ObjectDataSource>
    </div>
    </form>
</body>
</html>

Comentários

Em vez de especificar vários parâmetros que são passados para o Update, Inserte Delete métodos, você pode criar um objeto que agrega vários valores de campo de dados. Esse objeto é passado para os métodos, em vez de vários parâmetros.

O comportamento padrão de um ObjectDataSource controle associado a um controle associado a dados é que o controle associado a dados cria um Parameter objeto para cada parâmetro na fonte de dados. Se o objeto de negócios tiver muitos campos, o método resultante também terá muitos campos. A DataObjectTypeName propriedade permite que você especifique um tipo que tenha uma propriedade para cada campo de dados. Em seguida, em vez de passar vários parâmetros para o método, o runtime cria um objeto e define todas as suas propriedades. Este objeto é adicionado à coleção de parâmetros para a chamada de método.

O tipo especificado pela DataObjectTypeName propriedade deve ter um construtor sem parâmetros que não tenha parâmetros, portanto, o ObjectDataSource controle pode criar uma instância do tipo. O tipo também deve ter propriedades configuráveis que permitem que o ObjectDataSource controle preencha o objeto com valores passados do controle associado a dados. Espera-se que os nomes de propriedade no ObjectDataSource controle correspondam exatamente aos nomes de parâmetros de valores passados pelo controle associado a dados.

Quando a DataObjectTypeName propriedade é definida e o ObjectDataSource controle está associado a um controle associado a dados, os métodos especificados pelo e DeleteMethod as InsertMethod propriedades devem ter um parâmetro do tipo especificado na DataObjectTypeName propriedade. Se a ConflictDetection propriedade for definida como o OverwriteChanges valor, o método especificado pela UpdateMethod propriedade deverá ter um parâmetro do tipo especificado na DataObjectTypeName propriedade. Se a ConflictDetection propriedade for definida como o CompareAllValues valor, o método especificado pela UpdateMethod propriedade deverá ter dois parâmetros do tipo especificado na DataObjectTypeName propriedade. O primeiro parâmetro contém os valores originais; o segundo parâmetro contém os novos valores.

A DataObjectTypeName propriedade delega à DataObjectTypeName propriedade da ObjectDataSourceView que está associada ao ObjectDataSource controle.

Aplica-se a

Confira também