Illustrates a custom middle-tier business object that can be used with an
Example
The following code example illustrates a custom middle-tier business object that can be used with an ObjectDataSource control that specifies a strongly typed source object using the
To use the code, you can create a code file in your Web application's App_Code subdirectory and copy the code into the file. The business object will then be compiled dynamically and included as part of your Web application. Alternatively, you can compile the business object and place it in the Bin directory of an ASP.NET application or in the Global Assembly Cache (GAC). For more information on the App_Code and Bin directories, see Shared Code Folders in ASP.NET Web Sites.
Visual BasicВ | ![]() |
---|---|
Imports System Imports System.Configuration Imports System.Data Imports System.Data.SqlClient Imports System.Collections.Generic Imports System.Web.UI Imports System.Web.UI.WebControls Namespace Samples.AspNet.ObjectDataSource Public Class NorthwindEmployee Private _employeeID As Integer Private _lastName As String Private _firstName As String Private _address As String Private _city As String Private _region As String Private _postalCode As String Public Sub New() End Sub Public Property EmployeeID As Integer Get Return _employeeID End Get Set _employeeID = value End Set End Property Public Property LastName As String Get Return _lastName End Get Set _lastName = value End Set End Property Public Property FirstName As String Get Return _firstName End Get Set _firstName = value End Set End Property Public Property Address As String Get Return _address End Get Set _address = value End Set End Property Public Property City As String Get Return _city End Get Set _city = value End Set End Property Public Property Region As String Get Return _region End Get Set _region = value End Set End Property Public Property PostalCode As String Get Return _postalCode End Get Set _postalCode = value End Set End Property End Class ' ' Northwind Employee Data Factory ' Public Class NorthwindEmployeeData Private _connectionString As String Public Sub New() Initialize() End Sub Public Sub Initialize() ' Initialize data source. Use "Northwind" connection string from configuration. If ConfigurationManager.ConnectionStrings("Northwind") Is Nothing OrElse _ ConfigurationManager.ConnectionStrings("Northwind").ConnectionString.Trim() = "" Then Throw New Exception("A connection string named 'Northwind' with a valid connection string " & _ "must exist in the <connectionStrings> configuration section for the application.") End If _connectionString = _ ConfigurationManager.ConnectionStrings("Northwind").ConnectionString End Sub ' Select all employees. Public Function GetAllEmployees(sortColumns As String, startRecord As Integer, _ maxRecords As Integer) As List(of NorthwindEmployee) VerifySortColumns(sortColumns) Dim sqlCmd As String = "SELECT EmployeeID, LastName, FirstName, Address, City, Region, PostalCode FROM Employees " If sortColumns.Trim() = "" Then sqlCmd &= "ORDER BY EmployeeID" Else sqlCmd &= "ORDER BY " & sortColumns End If Dim conn As SqlConnection = New SqlConnection(_connectionString) Dim cmd As SqlCommand = New SqlCommand(sqlCmd, conn) Dim reader As SqlDataReader = Nothing Dim employees As List(of NorthwindEmployee) = New List(of NorthwindEmployee)() Dim count As Integer = 0 Try conn.Open() reader = cmd.ExecuteReader() Do While reader.Read() If count >= startRecord Then If employees.Count < maxRecords Then employees.Add(GetNorthwindEmployeeFromReader(reader)) Else cmd.Cancel() End If End If count += 1 Loop Catch e As SqlException ' Handle exception. Finally If reader IsNot Nothing Then reader.Close() conn.Close() End Try Return employees End Function ''''' ' Verify that only valid columns are specified in the sort expression to aSub a SQL Injection attack. Private Sub VerifySortColumns(sortColumns As String) If sortColumns.ToLowerInvariant().EndsWith(" desc") Then _ sortColumns = sortColumns.Substring(0, sortColumns.Length - 5) Dim columnNames() As String = sortColumns.Split(",") For Each columnName As String In columnNames Select Case columnName.Trim().ToLowerInvariant() Case "employeeid" Case "lastname" Case "firstname" Case "" Case Else Throw New ArgumentException("SortColumns contains an invalid column name.") End Select Next End Sub Private Function GetNorthwindEmployeeFromReader(reader As SqlDataReader) As NorthwindEmployee Dim employee As NorthwindEmployee = New NorthwindEmployee() employee.EmployeeID = reader.GetInt32(0) employee.LastName = reader.GetString(1) employee.FirstName = reader.GetString(2) If reader.GetValue(3) IsNot DBNull.Value Then _ employee.Address = reader.GetString(3) If reader.GetValue(4) IsNot DBNull.Value Then _ employee.City = reader.GetString(4) If reader.GetValue(5) IsNot DBNull.Value Then _ employee.Region = reader.GetString(5) If reader.GetValue(6) IsNot DBNull.Value Then _ employee.PostalCode = reader.GetString(6) Return employee End Function ' Select an employee. Public Function GetEmployee(EmployeeID As Integer) As List(of NorthwindEmployee) Dim conn As SqlConnection = New SqlConnection(_connectionString) Dim cmd As SqlCommand = _ New SqlCommand("SELECT EmployeeID, LastName, FirstName, Address, City, Region, PostalCode " & _ " FROM Employees WHERE EmployeeID = @EmployeeID", conn) cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID Dim reader As SqlDataReader = Nothing Dim employees As List(of NorthwindEmployee) = New List(of NorthwindEmployee)() Try conn.Open() reader = cmd.ExecuteReader(CommandBehavior.SingleRow) Do While reader.Read() employees.Add(GetNorthwindEmployeeFromReader(reader)) Loop Catch e As SqlException ' Handle exception. Finally If reader IsNot Nothing Then reader.Close() conn.Close() End Try Return employees End Function ' ' Update the Employee by ID. ' This method assumes that ConflictDetection is Set to OverwriteValues. Public Function UpdateEmployee(employee As NorthwindEmployee) As Integer If String.IsNullOrEmpty(employee.FirstName) Then _ Throw New ArgumentException("FirstName cannot be null or an empty string.") If String.IsNullOrEmpty(employee.LastName) Then _ Throw New ArgumentException("LastName cannot be null or an empty string.") If employee.Address Is Nothing Then employee.Address = String.Empty If employee.City Is Nothing Then employee.City = String.Empty If employee.Region Is Nothing Then employee.Region = String.Empty If employee.PostalCode Is Nothing Then employee.PostalCode = String.Empty Dim conn As SqlConnection = New SqlConnection(_connectionString) Dim cmd As SqlCommand = New SqlCommand("UPDATE Employees " & _ " SET FirstName=@FirstName, LastName=@LastName, " & _ " Address=@Address, City=@City, Region=@Region, " & _ " PostalCode=@PostalCode " & _ " WHERE EmployeeID=@EmployeeID", conn) cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 10).Value = employee.FirstName cmd.Parameters.Add("@LastName", SqlDbType.VarChar, 20).Value = employee.LastName cmd.Parameters.Add("@Address", SqlDbType.VarChar, 60).Value = employee.Address cmd.Parameters.Add("@City", SqlDbType.VarChar, 15).Value = employee.City cmd.Parameters.Add("@Region", SqlDbType.VarChar, 15).Value = employee.Region cmd.Parameters.Add("@PostalCode", SqlDbType.VarChar, 10).Value = employee.PostalCode cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = employee.EmployeeID Dim result As Integer = 0 Try conn.Open() result = cmd.ExecuteNonQuery() Catch e As SqlException ' Handle exception. Finally conn.Close() End Try Return result End Function ' Insert an Employee. Public Function InsertEmployee(employee As NorthwindEmployee) As Integer If String.IsNullOrEmpty(employee.FirstName) Then _ Throw New ArgumentException("FirstName cannot be null or an empty string.") If String.IsNullOrEmpty(employee.LastName) Then _ Throw New ArgumentException("LastName cannot be null or an empty string.") If employee.Address Is Nothing Then employee.Address = String.Empty If employee.City Is Nothing Then employee.City = String.Empty If employee.Region Is Nothing Then employee.Region = String.Empty If employee.PostalCode Is Nothing Then employee.PostalCode = String.Empty Dim conn As SqlConnection = New SqlConnection(_connectionString) Dim cmd As SqlCommand = New SqlCommand("INSERT INTO Employees " & _ " (FirstName, LastName, Address, City, Region, PostalCode) " & _ " Values(@FirstName, @LastName, @Address, @City, @Region, @PostalCode) " & _ "SELECT @EmployeeID = SCOPE_IDENTITY()", conn) cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 10).Value = employee.FirstName cmd.Parameters.Add("@LastName", SqlDbType.VarChar, 20).Value = employee.LastName cmd.Parameters.Add("@Address", SqlDbType.VarChar, 60).Value = employee.Address cmd.Parameters.Add("@City", SqlDbType.VarChar, 15).Value = employee.City cmd.Parameters.Add("@Region", SqlDbType.VarChar, 15).Value = employee.Region cmd.Parameters.Add("@PostalCode", SqlDbType.VarChar, 10).Value = employee.PostalCode Dim p As SqlParameter = cmd.Parameters.Add("@EmployeeID", SqlDbType.Int) p.Direction = ParameterDirection.Output Dim newEmployeeID As Integer= 0 Try conn.Open() cmd.ExecuteNonQuery() newEmployeeID = CInt(p.Value) Catch e As SqlException ' Handle exception. Finally conn.Close() End Try Return newEmployeeID End Function ' ' Delete the Employee by ID. ' This method assumes that ConflictDetection is Set to OverwriteValues. Public Function DeleteEmployee(employee As NorthwindEmployee) As Integer Dim sqlCmd As String = "DELETE FROM Employees WHERE EmployeeID = @EmployeeID" Dim conn As SqlConnection = New SqlConnection(_connectionString) Dim cmd As SqlCommand = New SqlCommand(sqlCmd, conn) cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = employee.EmployeeID Dim result As Integer = 0 Try conn.Open() result = cmd.ExecuteNonQuery() Catch e As SqlException ' Handle exception. Finally conn.Close() End Try Return result End Function End Class End Namespace |
C#В | ![]() |
---|---|
using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Collections.Generic; using System.Web.UI; using System.Web.UI.WebControls; namespace Samples.AspNet.ObjectDataSource { public class NorthwindEmployee { private int _employeeID; private string _lastName; private string _firstName; private string _address; private string _city; private string _region; private string _postalCode; public NorthwindEmployee() { } public int EmployeeID { get { return _employeeID; } set { _employeeID = value; } } public string LastName { get { return _lastName; } set { _lastName = value; } } public string FirstName { get { return _firstName; } set { _firstName = value; } } public string Address { get { return _address; } set { _address = value; } } public string City { get { return _city; } set { _city = value; } } public string Region { get { return _region; } set { _region = value; } } public string PostalCode { get { return _postalCode; } set { _postalCode = value; } } } // // Northwind Employee Data Factory // public class NorthwindEmployeeData { private string _connectionString; public NorthwindEmployeeData() { Initialize(); } public void Initialize() { // Initialize data source. Use "Northwind" connection string from configuration. if (ConfigurationManager.ConnectionStrings["Northwind"] == null || ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString.Trim() == "") { throw new Exception("A connection string named 'Northwind' with a valid connection string " + "must exist in the <connectionStrings> configuration section for the application."); } _connectionString = ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString; } // Select all employees. public List<NorthwindEmployee> GetAllEmployees(string sortColumns, int startRecord, int maxRecords) { VerifySortColumns(sortColumns); string sqlCmd = "SELECT EmployeeID, LastName, FirstName, Address, City, Region, PostalCode FROM Employees "; if (sortColumns.Trim() == "") sqlCmd += "ORDER BY EmployeeID"; else sqlCmd += "ORDER BY " + sortColumns; SqlConnection conn = new SqlConnection(_connectionString); SqlCommand cmd = new SqlCommand(sqlCmd, conn); SqlDataReader reader = null; List<NorthwindEmployee> employees = new List<NorthwindEmployee>(); int count = 0; try { conn.Open(); reader = cmd.ExecuteReader(); while (reader.Read()) { if (count >= startRecord) { if (employees.Count < maxRecords) employees.Add(GetNorthwindEmployeeFromReader(reader)); else cmd.Cancel(); } count++; } } catch (SqlException e) { // Handle exception. } finally { if (reader != null) { reader.Close(); } conn.Close(); } return employees; } ////////// // Verify that only valid columns are specified in the sort expression to avoid a SQL Injection attack. private void VerifySortColumns(string sortColumns) { if (sortColumns.ToLowerInvariant().EndsWith(" desc")) sortColumns = sortColumns.Substring(0, sortColumns.Length - 5); string[] columnNames = sortColumns.Split(','); foreach (string columnName in columnNames) { switch (columnName.Trim().ToLowerInvariant()) { case "employeeid": break; case "lastname": break; case "firstname": break; case "": break; default: throw new ArgumentException("SortColumns contains an invalid column name."); break; } } } private NorthwindEmployee GetNorthwindEmployeeFromReader(SqlDataReader reader) { NorthwindEmployee employee = new NorthwindEmployee(); employee.EmployeeID = reader.GetInt32(0); employee.LastName = reader.GetString(1); employee.FirstName = reader.GetString(2); if (reader.GetValue(3) != DBNull.Value) employee.Address = reader.GetString(3); if (reader.GetValue(4) != DBNull.Value) employee.City = reader.GetString(4); if (reader.GetValue(5) != DBNull.Value) employee.Region = reader.GetString(5); if (reader.GetValue(6) != DBNull.Value) employee.PostalCode = reader.GetString(6); return employee; } // Select an employee. public List<NorthwindEmployee> GetEmployee(int EmployeeID) { SqlConnection conn = new SqlConnection(_connectionString); SqlCommand cmd = new SqlCommand("SELECT EmployeeID, LastName, FirstName, Address, City, Region, PostalCode " + " FROM Employees WHERE EmployeeID = @EmployeeID", conn); cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID; SqlDataReader reader = null; List<NorthwindEmployee> employees = new List<NorthwindEmployee>(); try { conn.Open(); reader = cmd.ExecuteReader(CommandBehavior.SingleRow); while (reader.Read()) employees.Add(GetNorthwindEmployeeFromReader(reader)); } catch (SqlException e) { // Handle exception. } finally { if (reader != null) { reader.Close(); } conn.Close(); } return employees; } // // Update the Employee by ID. // This method assumes that ConflictDetection is set to OverwriteValues. public int UpdateEmployee(NorthwindEmployee employee) { if (String.IsNullOrEmpty(employee.FirstName)) throw new ArgumentException("FirstName cannot be null or an empty string."); if (String.IsNullOrEmpty(employee.LastName)) throw new ArgumentException("LastName cannot be null or an empty string."); if (employee.Address == null) { employee.Address = String.Empty; } if (employee.City == null) { employee.City = String.Empty; } if (employee.Region == null) { employee.Region = String.Empty; } if (employee.PostalCode == null) { employee.PostalCode = String.Empty; } SqlConnection conn = new SqlConnection(_connectionString); SqlCommand cmd = new SqlCommand("UPDATE Employees " + " SET FirstName=@FirstName, LastName=@LastName, " + " Address=@Address, City=@City, Region=@Region, " + " PostalCode=@PostalCode " + " WHERE EmployeeID=@EmployeeID", conn); cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 10).Value = employee.FirstName; cmd.Parameters.Add("@LastName", SqlDbType.VarChar, 20).Value = employee.LastName; cmd.Parameters.Add("@Address", SqlDbType.VarChar, 60).Value = employee.Address; cmd.Parameters.Add("@City", SqlDbType.VarChar, 15).Value = employee.City; cmd.Parameters.Add("@Region", SqlDbType.VarChar, 15).Value = employee.Region; cmd.Parameters.Add("@PostalCode", SqlDbType.VarChar, 10).Value = employee.PostalCode; cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = employee.EmployeeID; int result = 0; try { conn.Open(); result = cmd.ExecuteNonQuery(); } catch (SqlException e) { // Handle exception. } finally { conn.Close(); } return result; } // Insert an Employee. public int InsertEmployee(NorthwindEmployee employee) { if (String.IsNullOrEmpty(employee.FirstName)) throw new ArgumentException("FirstName cannot be null or an empty string."); if (String.IsNullOrEmpty(employee.LastName)) throw new ArgumentException("LastName cannot be null or an empty string."); if (employee.Address == null) { employee.Address = String.Empty; } if (employee.City == null) { employee.City = String.Empty; } if (employee.Region == null) { employee.Region = String.Empty; } if (employee.PostalCode == null) { employee.PostalCode = String.Empty; } SqlConnection conn = new SqlConnection(_connectionString); SqlCommand cmd = new SqlCommand("INSERT INTO Employees " + " (FirstName, LastName, Address, City, Region, PostalCode) " + " Values(@FirstName, @LastName, @Address, @City, @Region, @PostalCode); " + "SELECT @EmployeeID = SCOPE_IDENTITY()", conn); cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 10).Value = employee.FirstName; cmd.Parameters.Add("@LastName", SqlDbType.VarChar, 20).Value = employee.LastName; cmd.Parameters.Add("@Address", SqlDbType.VarChar, 60).Value = employee.Address; cmd.Parameters.Add("@City", SqlDbType.VarChar, 15).Value = employee.City; cmd.Parameters.Add("@Region", SqlDbType.VarChar, 15).Value = employee.Region; cmd.Parameters.Add("@PostalCode", SqlDbType.VarChar, 10).Value = employee.PostalCode; SqlParameter p = cmd.Parameters.Add("@EmployeeID", SqlDbType.Int); p.Direction = ParameterDirection.Output; int newEmployeeID = 0; try { conn.Open(); cmd.ExecuteNonQuery(); newEmployeeID = (int)p.Value; } catch (SqlException e) { // Handle exception. } finally { conn.Close(); } return newEmployeeID; } // // Delete the Employee by ID. // This method assumes that ConflictDetection is set to OverwriteValues. public int DeleteEmployee(NorthwindEmployee employee) { string sqlCmd = "DELETE FROM Employees WHERE EmployeeID = @EmployeeID"; SqlConnection conn = new SqlConnection(_connectionString); SqlCommand cmd = new SqlCommand(sqlCmd, conn); cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = employee.EmployeeID; int result = 0; try { conn.Open(); result = cmd.ExecuteNonQuery(); } catch (SqlException e) { // Handle exception. } finally { conn.Close(); } return result; } } } |
Visual BasicВ | ![]() |
---|---|
<%@ Page language="VB" %> <script RunAt="server"> Sub EmployeesDetailsView_ItemInserted(sender As Object, e As DetailsViewInsertedEventArgs) EmployeesGridView.DataBind() End Sub Sub EmployeesDetailsView_ItemUpdated(sender As Object, e As DetailsViewUpdatedEventArgs) EmployeesGridView.DataBind() End Sub Sub EmployeesDetailsView_ItemDeleted(sender As Object, e As DetailsViewDeletedEventArgs) EmployeesGridView.DataBind() End Sub Sub EmployeesGridView_OnSelectedIndexChanged(sender As Object, e As EventArgs) EmployeeDetailsObjectDataSource.SelectParameters("EmployeeID").DefaultValue = _ EmployeesGridView.SelectedDataKey.Value.ToString() EmployeesDetailsView.DataBind() End Sub Sub EmployeeDetailsObjectDataSource_OnInserted(sender As Object, e As ObjectDataSourceStatusEventArgs) EmployeeDetailsObjectDataSource.SelectParameters("EmployeeID").DefaultValue = _ e.ReturnValue.ToString() EmployeesDetailsView.DataBind() End Sub Sub EmployeeDetailsObjectDataSource_OnUpdated(sender As Object, e As ObjectDataSourceStatusEventArgs) If CInt(e.ReturnValue) = 0 Then _ Msg.Text = "Employee was not updated. Please try again." End Sub Sub EmployeeDetailsObjectDataSource_OnDeleted(sender As Object, e As ObjectDataSourceStatusEventArgs) If CInt(e.ReturnValue) = 0 Then _ Msg.Text = "Employee was not deleted. Please try again." End Sub Sub Page_Load() Msg.Text = "" End Sub </script> <html> <body> <form runat="server"> <h3>ObjectDataSource Example</h3> <asp:Label id="Msg" runat="server" ForeColor="Red" /> <asp:ObjectDataSource ID="EmployeesObjectDataSource" runat="server" TypeName="Samples.AspNet.ObjectDataSource.NorthwindEmployeeData" DataObjectTypeName="Samples.AspNet.ObjectDataSource.NorthwindEmployee" SortParameterName="SortColumns" EnablePaging="true" StartRowIndexParameterName="StartRecord" MaximumRowsParameterName="MaxRecords" SelectMethod="GetAllEmployees" > </asp:ObjectDataSource> <asp:ObjectDataSource ID="EmployeeDetailsObjectDataSource" runat="server" TypeName="Samples.AspNet.ObjectDataSource.NorthwindEmployeeData" DataObjectTypeName="Samples.AspNet.ObjectDataSource.NorthwindEmployee" SelectMethod="GetEmployee" InsertMethod="InsertEmployee" UpdateMethod="UpdateEmployee" DeleteMethod="DeleteEmployee" OnInserted="EmployeeDetailsObjectDataSource_OnInserted" OnUpdated="EmployeeDetailsObjectDataSource_OnUpdated" OnDeleted="EmployeeDetailsObjectDataSource_OnDeleted"> <SelectParameters> <asp:Parameter Name="EmployeeID" Type="Int32" /> </SelectParameters> </asp:ObjectDataSource> <table cellspacing="10"> <tr> <td valign="top"> <asp:GridView ID="EmployeesGridView" DataSourceID="EmployeesObjectDataSource" AutoGenerateColumns="false" AllowSorting="true" AllowPaging="true" PageSize="5" DataKeyNames="EmployeeID" OnSelectedIndexChanged="EmployeesGridView_OnSelectedIndexChanged" RunAt="server"> <HeaderStyle backcolor="lightblue" forecolor="black"/> <Columns> <asp:ButtonField Text="Details..." HeaderText="Show Details" CommandName="Select"/> <asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" SortExpression="EmployeeID" /> <asp:BoundField DataField="FirstName" HeaderText="First Name" SortExpression="FirstName" /> <asp:BoundField DataField="LastName" HeaderText="Last Name" SortExpression="LastName, FirstName" /> </Columns> </asp:GridView> </td> <td valign="top"> <asp:DetailsView ID="EmployeesDetailsView" DataSourceID="EmployeeDetailsObjectDataSource" AutoGenerateRows="false" EmptyDataText="No records." DataKeyNames="EmployeeID" Gridlines="Both" AutoGenerateInsertButton="true" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" OnItemInserted="EmployeesDetailsView_ItemInserted" OnItemUpdated="EmployeesDetailsView_ItemUpdated" OnItemDeleted="EmployeesDetailsView_ItemDeleted" RunAt="server"> <HeaderStyle backcolor="Navy" forecolor="White"/> <RowStyle backcolor="White"/> <AlternatingRowStyle backcolor="LightGray"/> <EditRowStyle backcolor="LightCyan"/> <Fields> <asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" InsertVisible="False" ReadOnly="true"/> <asp:BoundField DataField="FirstName" HeaderText="First Name"/> <asp:BoundField DataField="LastName" HeaderText="Last Name"/> <asp:BoundField DataField="Address" HeaderText="Address"/> <asp:BoundField DataField="City" HeaderText="City"/> <asp:BoundField DataField="Region" HeaderText="Region"/> <asp:BoundField DataField="PostalCode" HeaderText="Postal Code"/> </Fields> </asp:DetailsView> </td> </tr> </table> </form> </body> </html> |
C#В | ![]() |
---|---|
<%@ Page language="C#" %> <script RunAt="server"> void EmployeesDetailsView_ItemInserted(Object sender, DetailsViewInsertedEventArgs e) { EmployeesGridView.DataBind(); } void EmployeesDetailsView_ItemUpdated(Object sender, DetailsViewUpdatedEventArgs e) { EmployeesGridView.DataBind(); } void EmployeesDetailsView_ItemDeleted(Object sender, DetailsViewDeletedEventArgs e) { EmployeesGridView.DataBind(); } void EmployeesGridView_OnSelectedIndexChanged(object sender, EventArgs e) { EmployeeDetailsObjectDataSource.SelectParameters["EmployeeID"].DefaultValue = EmployeesGridView.SelectedDataKey.Value.ToString(); EmployeesDetailsView.DataBind(); } void EmployeeDetailsObjectDataSource_OnInserted(object sender, ObjectDataSourceStatusEventArgs e) { EmployeeDetailsObjectDataSource.SelectParameters["EmployeeID"].DefaultValue = e.ReturnValue.ToString(); EmployeesDetailsView.DataBind(); } void EmployeeDetailsObjectDataSource_OnUpdated(object sender, ObjectDataSourceStatusEventArgs e) { if ((int)e.ReturnValue == 0) Msg.Text = "Employee was not updated. Please try again."; } void EmployeeDetailsObjectDataSource_OnDeleted(object sender, ObjectDataSourceStatusEventArgs e) { if ((int)e.ReturnValue == 0) Msg.Text = "Employee was not deleted. Please try again."; } void Page_Load() { Msg.Text = ""; } </script> <html> <body> <form runat="server"> <h3>ObjectDataSource Example</h3> <asp:Label id="Msg" runat="server" ForeColor="Red" /> <asp:ObjectDataSource ID="EmployeesObjectDataSource" runat="server" TypeName="Samples.AspNet.ObjectDataSource.NorthwindEmployeeData" DataObjectTypeName="Samples.AspNet.ObjectDataSource.NorthwindEmployee" SortParameterName="SortColumns" EnablePaging="true" StartRowIndexParameterName="StartRecord" MaximumRowsParameterName="MaxRecords" SelectMethod="GetAllEmployees" > </asp:ObjectDataSource> <asp:ObjectDataSource ID="EmployeeDetailsObjectDataSource" runat="server" TypeName="Samples.AspNet.ObjectDataSource.NorthwindEmployeeData" DataObjectTypeName="Samples.AspNet.ObjectDataSource.NorthwindEmployee" SelectMethod="GetEmployee" InsertMethod="InsertEmployee" UpdateMethod="UpdateEmployee" DeleteMethod="DeleteEmployee" OnInserted="EmployeeDetailsObjectDataSource_OnInserted" OnUpdated="EmployeeDetailsObjectDataSource_OnUpdated" OnDeleted="EmployeeDetailsObjectDataSource_OnDeleted"> <SelectParameters> <asp:Parameter Name="EmployeeID" Type="Int32" /> </SelectParameters> </asp:ObjectDataSource> <table cellspacing="10"> <tr> <td valign="top"> <asp:GridView ID="EmployeesGridView" DataSourceID="EmployeesObjectDataSource" AutoGenerateColumns="false" AllowSorting="true" AllowPaging="true" PageSize="5" DataKeyNames="EmployeeID" OnSelectedIndexChanged="EmployeesGridView_OnSelectedIndexChanged" RunAt="server"> <HeaderStyle backcolor="lightblue" forecolor="black"/> <Columns> <asp:ButtonField Text="Details..." HeaderText="Show Details" CommandName="Select"/> <asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" SortExpression="EmployeeID" /> <asp:BoundField DataField="FirstName" HeaderText="First Name" SortExpression="FirstName" /> <asp:BoundField DataField="LastName" HeaderText="Last Name" SortExpression="LastName, FirstName" /> </Columns> </asp:GridView> </td> <td valign="top"> <asp:DetailsView ID="EmployeesDetailsView" DataSourceID="EmployeeDetailsObjectDataSource" AutoGenerateRows="false" EmptyDataText="No records." DataKeyNames="EmployeeID" Gridlines="Both" AutoGenerateInsertButton="true" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" OnItemInserted="EmployeesDetailsView_ItemInserted" OnItemUpdated="EmployeesDetailsView_ItemUpdated" OnItemDeleted="EmployeesDetailsView_ItemDeleted" RunAt="server"> <HeaderStyle backcolor="Navy" forecolor="White"/> <RowStyle backcolor="White"/> <AlternatingRowStyle backcolor="LightGray"/> <EditRowStyle backcolor="LightCyan"/> <Fields> <asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" InsertVisible="False" ReadOnly="true"/> <asp:BoundField DataField="FirstName" HeaderText="First Name"/> <asp:BoundField DataField="LastName" HeaderText="Last Name"/> <asp:BoundField DataField="Address" HeaderText="Address"/> <asp:BoundField DataField="City" HeaderText="City"/> <asp:BoundField DataField="Region" HeaderText="Region"/> <asp:BoundField DataField="PostalCode" HeaderText="Postal Code"/> </Fields> </asp:DetailsView> </td> </tr> </table> </form> </body> </html> |
The example requires a connection string for the sample Northwind database on a SQL Server. The connection string must be defined in the
В | ![]() |
---|---|
<configuration> <system.web> <connectionStrings> <add name="Northwind" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" /> </connectionStrings> </system.web> </configuration> |