Udostępnij za pośrednictwem


ObjectDataSource.DataObjectTypeName Właściwość

Definicja

Pobiera lub ustawia nazwę klasy używanej ObjectDataSource przez kontrolkę dla parametru w operacji aktualizacji, wstawiania lub usuwania danych zamiast przekazywania poszczególnych wartości z kontrolki powiązanej z danymi.

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

Wartość właściwości

Częściowo lub w pełni kwalifikowana nazwa klasy, która identyfikuje typ obiektu, który ObjectDataSource może być używany jako parametr dla Insert()operacji , Update()lub Delete() . Wartością domyślną jest ciąg pusty ("").

Przykłady

Sekcja zawiera dwa przykłady kodu. Pierwszy przykład kodu pokazuje, jak zaimplementować typ, który łączy wszystkie wartości parametrów w jeden obiekt przy użyciu DataObjectTypeName właściwości . Drugi przykład kodu przedstawia stronę sieci Web, która używa dwóch klas używanych w pierwszym przykładzie kodu.

W poniższym przykładzie kodu pokazano, jak zaimplementować typ, który łączy wszystkie wartości parametrów w jeden obiekt przy użyciu DataObjectTypeName właściwości . Metoda AggregateData select klasy zwraca DataTable obiekt z dwiema kolumnami o nazwie Name i Number. NewData Podobnie klasa definiuje dwie właściwości Name odczytu/zapisu i Number. Metoda InsertAggregateData klasy przyjmuje jeden parametr typu NewData. Właściwość TypeNameObjectDataSource jest ustawiona na AggregateData , a właściwość jest ustawiona DataObjectTypeName na 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

Poniższy przykład kodu przedstawia stronę sieci Web, która używa dwóch klas używanych w poprzednim przykładzie kodu.

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

Uwagi

Zamiast określać kilka parametrów przekazywanych do Updatemetod , Inserti Delete można utworzyć jeden obiekt, który agreguje kilka wartości pól danych. Ten jeden obiekt jest przekazywany do metod zamiast kilku parametrów.

Domyślne zachowanie kontrolki ObjectDataSource powiązanej z kontrolką związaną z danymi polega na tym, że kontrolka powiązana z danymi tworzy Parameter obiekt dla każdego parametru w źródle danych. Jeśli obiekt biznesowy ma wiele pól, wynikowa metoda ma również wiele pól. Właściwość DataObjectTypeName umożliwia określenie typu, który ma właściwość dla każdego pola danych. Następnie zamiast przekazywać kilka parametrów do metody, środowisko uruchomieniowe tworzy jeden obiekt i ustawia wszystkie jego właściwości. Ten jeden obiekt jest dodawany do kolekcji parametrów wywołania metody.

Typ określony przez DataObjectTypeName właściwość musi mieć konstruktor bez parametrów, który nie ma parametrów, więc kontrolka ObjectDataSource może utworzyć wystąpienie typu. Typ musi również mieć właściwości konfigurowalne, które umożliwiają ObjectDataSource kontrolce wypełnienie obiektu wartościami przekazywanymi z kontrolki powiązanej z danymi. Nazwy właściwości kontrolki ObjectDataSource powinny być dokładnie zgodne z nazwami parametrów wartości przekazywanych przez kontrolkę związaną z danymi.

DataObjectTypeName Gdy właściwość jest ustawiona, a kontrolka ObjectDataSource jest skojarzona z formantem powiązanym z danymi, metody określone przez InsertMethod właściwości i DeleteMethod muszą mieć jeden parametr typu określonego DataObjectTypeName we właściwości. ConflictDetection Jeśli właściwość jest ustawiona na OverwriteChanges wartość, metoda określona przez UpdateMethod właściwość musi mieć jeden parametr typu określonego DataObjectTypeName we właściwości. ConflictDetection Jeśli właściwość jest ustawiona na CompareAllValues wartość, metoda określona przez UpdateMethod właściwość musi mieć dwa parametry typu określonego DataObjectTypeName we właściwości. Pierwszy parametr zawiera oryginalne wartości; drugi parametr zawiera nowe wartości.

Właściwość DataObjectTypeName deleguje do DataObjectTypeName właściwości skojarzonej ObjectDataSourceView z kontrolką ObjectDataSource .

Dotyczy

Zobacz też