ObjectDataSource.DataObjectTypeName Property

Definition

Gets or sets the name of a class that the ObjectDataSource control uses for a parameter in an update, insert, or delete data operation, instead of passing individual values from the data-bound control.

C#
public string DataObjectTypeName { get; set; }

Property Value

A partially or fully qualified class name that identifies the type of the object that the ObjectDataSource can use as a parameter for an Insert(), Update(), or a Delete() operation. The default is an empty string ("").

Examples

The section contains two code examples. The first code example demonstrates how to implement a type that combines all parameter values into one object, using the DataObjectTypeName property. The second code example shows the Web page that uses the two classes that are used in the first code example.

The following code example demonstrates how to implement a type that combines all parameter values into one object, using the DataObjectTypeName property. The select method of the AggregateData class returns a DataTable object with two columns named Name and Number. Similarly, the NewData class defines two read/write properties, Name and Number. The Insert method of the AggregateData class takes one parameter of type NewData. The TypeName property of the ObjectDataSource is set to AggregateData and the DataObjectTypeName property is set to NewData.

C#
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; }
        }
    }
}

The following code example shows the Web page that uses the two classes that are used in the preceding code example.

ASP.NET (C#)
<%@ 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>

Remarks

Instead of specifying several parameters that are passed to the Update, Insert, and Delete methods, you can create one object that aggregates several data field values. This one object is passed to the methods, instead of several parameters.

The default behavior of an ObjectDataSource control that is bound to a data-bound control is that the data-bound control creates a Parameter object for each parameter in the data source. If the business object has many fields, the resulting method also has many fields. The DataObjectTypeName property allows you to specify a type that has a property for each data field. Then, instead of passing several parameters to the method, the runtime creates one object and sets all of its properties. This one object is added to the parameters collection for the method call.

The type that is specified by the DataObjectTypeName property must have a parameterless constructor that has no parameters, so the ObjectDataSource control can create an instance of the type. The type must also have settable properties that allow the ObjectDataSource control to populate the object with values that are passed from the data-bound control. The property names on the ObjectDataSource control are expected to exactly match the parameter names of values that are passed by the data-bound control.

When the DataObjectTypeName property is set and the ObjectDataSource control is associated with a data-bound control, the methods that are specified by the InsertMethod and DeleteMethod properties must each have one parameter of the type that is specified in the DataObjectTypeName property. If the ConflictDetection property is set to the OverwriteChanges value, the method that is specified by the UpdateMethod property must have one parameter of the type that is specified in the DataObjectTypeName property. If the ConflictDetection property is set to the CompareAllValues value, the method that is specified by the UpdateMethod property must have two parameters of the type that is specified in the DataObjectTypeName property. The first parameter contains the original values; the second parameter contains the new values.

The DataObjectTypeName property delegates to the DataObjectTypeName property of the ObjectDataSourceView that is associated with the ObjectDataSource control.

Applies to

Produkt Verzie
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

See also