Condividi tramite


ObjectDataSource.DataObjectTypeName Proprietà

Definizione

Ottiene o imposta il nome di una classe utilizzata dal controllo ObjectDataSource per un parametro in un'operazione sui dati di aggiornamento, inserimento o eliminazione, invece di passare singoli valori dal controllo con associazione a dati.

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

Valore della proprietà

Nome di classe parziale o completo che identifica il tipo di oggetto che ObjectDataSource può utilizzare come parametro per Insert(), Update() o un'operazione Delete(). Il valore predefinito è una stringa vuota ("").

Esempio

La sezione contiene due esempi di codice. Il primo esempio di codice illustra come implementare un tipo che combina tutti i valori dei parametri in un oggetto, usando la DataObjectTypeName proprietà . Il secondo esempio di codice mostra la pagina Web che usa le due classi usate nel primo esempio di codice.

Nell'esempio di codice seguente viene illustrato come implementare un tipo che combina tutti i valori dei parametri in un oggetto usando la DataObjectTypeName proprietà . Il metodo select della AggregateData classe restituisce un DataTable oggetto con due colonne denominate Name e Number. Analogamente, la NewData classe definisce due proprietà Name di lettura/scrittura e Number. Il Insert metodo della AggregateData classe accetta un parametro di tipo NewData. La TypeName proprietà dell'oggetto ObjectDataSource è impostata su AggregateData e la DataObjectTypeName proprietà è impostata su 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

Nell'esempio di codice seguente viene illustrata la pagina Web che usa le due classi usate nell'esempio di codice precedente.

<%@ 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>

Commenti

Anziché specificare diversi parametri passati ai Updatemetodi , Inserte Delete , è possibile creare un oggetto che aggrega diversi valori di campo dati. Questo oggetto viene passato ai metodi anziché a diversi parametri.

Il comportamento predefinito di un controllo associato a un ObjectDataSource controllo associato a dati è che il controllo associato a dati crea un Parameter oggetto per ogni parametro nell'origine dati. Se l'oggetto business include molti campi, il metodo risultante include anche molti campi. La DataObjectTypeName proprietà consente di specificare un tipo con una proprietà per ogni campo dati. Invece di passare diversi parametri al metodo, il runtime crea un oggetto e imposta tutte le relative proprietà. Questo oggetto viene aggiunto all'insieme parametri per la chiamata al metodo.

Il tipo specificato dalla DataObjectTypeName proprietà deve avere un costruttore senza parametri senza parametri, in modo che il ObjectDataSource controllo possa creare un'istanza del tipo. Il tipo deve avere anche proprietà di tabella impostate che consentono al controllo di popolare l'oggetto ObjectDataSource con valori passati dal controllo associato a dati. I nomi delle proprietà del ObjectDataSource controllo devono corrispondere esattamente ai nomi dei parametri dei valori passati dal controllo associato ai dati.

Quando la DataObjectTypeName proprietà è impostata e il ObjectDataSource controllo è associato a un controllo associato a dati, i metodi specificati dalle InsertMethod proprietà e DeleteMethod devono avere un parametro del tipo specificato nella DataObjectTypeName proprietà. Se la ConflictDetection proprietà è impostata sul OverwriteChanges valore, il metodo specificato dalla UpdateMethod proprietà deve avere un parametro del tipo specificato nella DataObjectTypeName proprietà. Se la ConflictDetection proprietà è impostata sul CompareAllValues valore, il metodo specificato dalla UpdateMethod proprietà deve avere due parametri del tipo specificato nella DataObjectTypeName proprietà. Il primo parametro contiene i valori originali; il secondo parametro contiene i nuovi valori.

La DataObjectTypeName proprietà delega alla DataObjectTypeName proprietà dell'oggetto ObjectDataSourceView associato al ObjectDataSource controllo.

Si applica a

Vedi anche