//
// System.Web.UI.WebControls.SqlDataSourceView
//
// Authors:
// Ben Maurer (bmaurer@users.sourceforge.net)
// Sanjay Gupta (gsanjay@novell.com)
//
// (C) 2003 Ben Maurer
// (C) Novell, Inc. (http://www.novell.com)
//
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
#if NET_2_0
using System.Collections;
using System.Collections.Specialized;
using System.Text;
using System.Data;
using System.ComponentModel;
using System.Data.Common;
namespace System.Web.UI.WebControls{
public class SqlDataSourceView : DataSourceView, IStateManager {
HttpContext context;
DbProviderFactory factory;
DbConnection connection;
public SqlDataSourceView (SqlDataSource owner, string name, HttpContext context)
: base (owner, name)
{
this.owner = owner;
this.name = name;
this.context = context;
}
void InitConnection ()
{
if (factory == null) factory = owner.GetDbProviderFactoryInternal ();
if (connection == null) {
connection = factory.CreateConnection ();
connection.ConnectionString = owner.ConnectionString;
}
}
public int Delete (IDictionary keys, IDictionary oldValues)
{
return ExecuteDelete (keys, oldValues);
}
protected override int ExecuteDelete (IDictionary keys, IDictionary oldValues)
{
if (!CanDelete)
throw new NotSupportedException("Delete operation is not supported");
if (oldValues == null && ConflictDetection == ConflictOptions.CompareAllValues)
throw new InvalidOperationException ("oldValues parameters should be specified when ConflictOptions is set to CompareAllValues");
InitConnection ();
DbCommand command = factory.CreateCommand ();
command.CommandText = DeleteCommand;
command.Connection = connection;
if (DeleteCommandType == SqlDataSourceCommandType.Text)
command.CommandType = CommandType.Text;
else
command.CommandType = CommandType.StoredProcedure;
IDictionary oldDataValues;
if (ConflictDetection == ConflictOptions.CompareAllValues) {
oldDataValues = new Hashtable ();
if (keys != null) {
foreach (DictionaryEntry de in keys)
oldDataValues [de.Key] = de.Value;
}
if (oldValues != null) {
foreach (DictionaryEntry de in oldValues)
oldDataValues [de.Key] = de.Value;
}
}
else
oldDataValues = keys;
InitializeParameters (command, DeleteParameters, null, oldDataValues, true);
SqlDataSourceCommandEventArgs args = new SqlDataSourceCommandEventArgs (command);
OnDeleting (args);
if (args.Cancel)
return -1;
bool closed = connection.State == ConnectionState.Closed;
if (closed)
connection.Open();
Exception exception = null;
int result = -1;;
try {
result = command.ExecuteNonQuery();
} catch (Exception e) {
exception = e;
}
if (closed)
connection.Close ();
OnDataSourceViewChanged (EventArgs.Empty);
SqlDataSourceStatusEventArgs deletedArgs =
new SqlDataSourceStatusEventArgs (command, result, exception);
OnDeleted (deletedArgs);
if (exception != null && !deletedArgs.ExceptionHandled)
throw exception;
return result;
}
public int Insert (IDictionary values)
{
return ExecuteInsert (values);
}
protected override int ExecuteInsert (IDictionary values)
{
if (!CanInsert)
throw new NotSupportedException ("Insert operation is not supported");
InitConnection ();
DbCommand command = factory.CreateCommand ();
command.CommandText = InsertCommand;
command.Connection = connection;
if (InsertCommandType == SqlDataSourceCommandType.Text)
command.CommandType = CommandType.Text;
else
command.CommandType = CommandType.StoredProcedure;
InitializeParameters (command, InsertParameters, values, null, false);
SqlDataSourceCommandEventArgs args = new SqlDataSourceCommandEventArgs (command);
OnInserting (args);
if (args.Cancel)
return -1;
bool closed = connection.State == ConnectionState.Closed;
if (closed)
connection.Open ();
Exception exception = null;
int result = -1;
try {
result = command.ExecuteNonQuery ();
}
catch (Exception e) {
exception = e;
}
if (closed)
connection.Close ();
OnDataSourceViewChanged (EventArgs.Empty);
OnInserted (new SqlDataSourceStatusEventArgs (command, result, exception));
if (exception != null)
throw exception;
return result;
}
public IEnumerable Select (DataSourceSelectArguments arguments)
{
return ExecuteSelect (arguments);
}
protected internal override IEnumerable ExecuteSelect (DataSourceSelectArguments arguments)
{
if (SortParameterName.Length > 0 && SelectCommandType == SqlDataSourceCommandType.Text)
throw new NotSupportedException ("The SortParameterName property is only supported with stored procedure commands in SqlDataSource");
if (arguments.SortExpression.Length > 0 && owner.DataSourceMode == SqlDataSourceMode.DataReader)
throw new NotSupportedException ("SqlDataSource cannot sort. Set DataSourceMode to DataSet to enable sorting.");
if (arguments.StartRowIndex > 0 || arguments.MaximumRows > 0)
throw new NotSupportedException ("SqlDataSource does not have paging enabled. Set the DataSourceMode to DataSet to enable paging.");
if (FilterExpression.Length > 0 && owner.DataSourceMode == SqlDataSourceMode.DataReader)
throw new NotSupportedException ("SqlDataSource only supports filtering when the data source's DataSourceMode is set to DataSet.");
InitConnection ();
DbCommand command = factory.CreateCommand ();
command.CommandText = SelectCommand;
command.Connection = connection;
if (SelectCommandType == SqlDataSourceCommandType.Text)
command.CommandType = CommandType.Text;
else {
command.CommandType = CommandType.StoredProcedure;
if (SortParameterName.Length > 0 && arguments.SortExpression.Length > 0)
command.Parameters.Add (CreateDbParameter (SortParameterName, arguments.SortExpression));
}
if (SelectParameters.Count > 0)
InitializeParameters (command, SelectParameters, null, null, false);
Exception exception = null;
if (owner.DataSourceMode == SqlDataSourceMode.DataSet) {
DataView dataView = null;
if (owner.EnableCaching)
dataView = (DataView) owner.Cache.GetCachedObject (SelectCommand, SelectParameters);
if (dataView == null) {
SqlDataSourceSelectingEventArgs selectingArgs = new SqlDataSourceSelectingEventArgs (command, arguments);
OnSelecting (selectingArgs);
if (selectingArgs.Cancel || !PrepareNullParameters (command, CancelSelectOnNullParameter)) {
return null;
}
try {
DbDataAdapter adapter = factory.CreateDataAdapter ();
DataSet dataset = new DataSet ();
adapter.SelectCommand = command;
adapter.Fill (dataset, name);
dataView = dataset.Tables [0].DefaultView;
if (dataView == null)
throw new InvalidOperationException ();
}
catch (Exception e) {
exception = e;
}
int rowsAffected = (dataView == null) ? 0 : dataView.Count;
SqlDataSourceStatusEventArgs selectedArgs = new SqlDataSourceStatusEventArgs (command, rowsAffected, exception);
OnSelected (selectedArgs);
if (exception != null && !selectedArgs.ExceptionHandled)
throw exception;
if (owner.EnableCaching)
owner.Cache.SetCachedObject (SelectCommand, selectParameters, dataView);
}
if (SortParameterName.Length == 0 || SelectCommandType == SqlDataSourceCommandType.Text)
dataView.Sort = arguments.SortExpression;
if (FilterExpression.Length > 0) {
IOrderedDictionary fparams = FilterParameters.GetValues (context, owner);
SqlDataSourceFilteringEventArgs fargs = new SqlDataSourceFilteringEventArgs (fparams);
OnFiltering (fargs);
if (!fargs.Cancel) {
object [] formatValues = new object [fparams.Count];
for (int n = 0; n < formatValues.Length; n++) {
formatValues [n] = fparams [n];
if (formatValues [n] == null) return dataView;
}
dataView.RowFilter = string.Format (FilterExpression, formatValues);
}
}
return dataView;
}
else {
SqlDataSourceSelectingEventArgs selectingArgs = new SqlDataSourceSelectingEventArgs (command, arguments);
OnSelecting (selectingArgs);
if (selectingArgs.Cancel || !PrepareNullParameters (command, CancelSelectOnNullParameter)) {
return null;
}
DbDataReader reader = null;
bool closed = connection.State == ConnectionState.Closed;
if (closed)
connection.Open ();
try {
reader = command.ExecuteReader (closed ? CommandBehavior.CloseConnection : CommandBehavior.Default);
}
catch (Exception e) {
exception = e;
}
SqlDataSourceStatusEventArgs selectedArgs =
new SqlDataSourceStatusEventArgs (command, reader.RecordsAffected, exception);
OnSelected (selectedArgs);
if (exception != null && !selectedArgs.ExceptionHandled)
throw exception;
return reader;
}
}
static bool PrepareNullParameters (DbCommand command, bool cancelIfHas)
{
for (int i = 0; i < command.Parameters.Count; i++) {
DbParameter param = command.Parameters [i];
if (param.Value == null && ((param.Direction & ParameterDirection.Input) != 0)) {
if (cancelIfHas)
return false;
else
param.Value = DBNull.Value;
}
}
return true;
}
public int Update (IDictionary keys, IDictionary values, IDictionary oldValues)
{
return ExecuteUpdate (keys, values, oldValues);
}
protected override int ExecuteUpdate (IDictionary keys, IDictionary values, IDictionary oldValues)
{
if (!CanUpdate)
throw new NotSupportedException ("Update operation is not supported");
if (oldValues == null && ConflictDetection == ConflictOptions.CompareAllValues)
throw new InvalidOperationException ("oldValues parameters should be specified when ConflictOptions is set to CompareAllValues");
InitConnection ();
DbCommand command = factory.CreateCommand ();
command.CommandText = UpdateCommand;
command.Connection = connection;
if (UpdateCommandType == SqlDataSourceCommandType.Text)
command.CommandType = CommandType.Text;
else
command.CommandType = CommandType.StoredProcedure;
IDictionary oldDataValues;
if (ConflictDetection == ConflictOptions.CompareAllValues) {
oldDataValues = new OrderedDictionary ();
if (keys != null) {
foreach (DictionaryEntry de in keys)
oldDataValues [de.Key] = de.Value;
}
if (oldValues != null) {
foreach (DictionaryEntry de in oldValues)
oldDataValues [de.Key] = de.Value;
}
}
else {
oldDataValues = keys;
}
IDictionary dataValues = values;
InitializeParameters (command, UpdateParameters, dataValues, oldDataValues, ConflictDetection == ConflictOptions.OverwriteChanges);
SqlDataSourceCommandEventArgs args = new SqlDataSourceCommandEventArgs (command);
OnUpdating (args);
if (args.Cancel)
return -1;
bool closed = connection.State == ConnectionState.Closed;
if (closed)
connection.Open ();
Exception exception = null;
int result = -1;
try {
result = command.ExecuteNonQuery ();
}
catch (Exception e) {
exception = e;
}
if (closed)
connection.Close ();
OnDataSourceViewChanged (EventArgs.Empty);
SqlDataSourceStatusEventArgs updatedArgs =
new SqlDataSourceStatusEventArgs (command, result, exception);
OnUpdated (updatedArgs);
if (exception != null && !updatedArgs.ExceptionHandled)
throw exception;
return result;
}
string FormatOldParameter (string name)
{
string f = OldValuesParameterFormatString;
if (f.Length > 0)
return String.Format (f, name);
else
return name;
}
object FindValueByName (string parameterName, IDictionary values, bool format)
{
if (values == null)
return null;
foreach (DictionaryEntry de in values) {
string valueName = format == true ? FormatOldParameter (de.Key.ToString ()) : de.Key.ToString ();
if (String.Compare(parameterName, valueName, StringComparison.InvariantCultureIgnoreCase) == 0)
return values [de.Key];
}
return null;
}
void InitializeParameters (DbCommand command, ParameterCollection parameters, IDictionary values, IDictionary oldValues, bool parametersMayMatchOldValues)
{
IOrderedDictionary parameterValues = parameters.GetValues (context, owner);
foreach (string parameterName in parameterValues.Keys) {
Parameter p = parameters [parameterName];
object value = FindValueByName (parameterName, values, false);
string valueName = parameterName;
if (value == null)
value = FindValueByName (parameterName, oldValues, true);
if (value == null && parametersMayMatchOldValues) {
value = FindValueByName (parameterName, oldValues, false);
valueName = FormatOldParameter (parameterName);
}
if (value != null) {
object dbValue = p.ConvertValue (value);
DbParameter newParameter = CreateDbParameter (valueName, dbValue, p.Direction, p.Size);
if (!command.Parameters.Contains (newParameter.ParameterName)) {
command.Parameters.Add (newParameter);
}
}
else {
command.Parameters.Add (CreateDbParameter (p.Name, parameterValues [parameterName], p.Direction, p.Size));
}
}
if (values != null) {
foreach (DictionaryEntry de in values)
if (!command.Parameters.Contains (ParameterPrefix + (string) de.Key))
command.Parameters.Add (CreateDbParameter ((string) de.Key, de.Value));
}
if (oldValues != null) {
foreach (DictionaryEntry de in oldValues)
if (!command.Parameters.Contains (ParameterPrefix + FormatOldParameter ((string) de.Key)))
command.Parameters.Add (CreateDbParameter (FormatOldParameter ((string) de.Key), de.Value));
}
}
DbParameter CreateDbParameter (string name, object value)
{
return CreateDbParameter (name, value, ParameterDirection.Input, -1);
}
DbParameter CreateDbParameter (string name, object value, ParameterDirection dir, int size)
{
DbParameter dbp = factory.CreateParameter ();
dbp.ParameterName = ParameterPrefix + name;
dbp.Value = value;
dbp.Direction = dir;
if (size != -1)
dbp.Size = size;
return dbp;
}
void IStateManager.LoadViewState (object savedState)
{
LoadViewState (savedState);
}
object IStateManager.SaveViewState ()
{
return SaveViewState ();
}
void IStateManager.TrackViewState ()
{
TrackViewState ();
}
protected virtual void LoadViewState (object savedState)
{
object [] vs = savedState as object [];
if (vs == null)
return;
if (vs [0] != null) ((IStateManager) deleteParameters).LoadViewState (vs [0]);
if (vs [1] != null) ((IStateManager) filterParameters).LoadViewState (vs [1]);
if (vs [2] != null) ((IStateManager) insertParameters).LoadViewState (vs [2]);
if (vs [3] != null) ((IStateManager) selectParameters).LoadViewState (vs [3]);
if (vs [4] != null) ((IStateManager) updateParameters).LoadViewState (vs [4]);
}
protected virtual object SaveViewState ()
{
object [] vs = new object [5];
if (deleteParameters != null) vs [0] = ((IStateManager) deleteParameters).SaveViewState ();
if (filterParameters != null) vs [1] = ((IStateManager) filterParameters).SaveViewState ();
if (insertParameters != null) vs [2] = ((IStateManager) insertParameters).SaveViewState ();
if (selectParameters != null) vs [3] = ((IStateManager) selectParameters).SaveViewState ();
if (updateParameters != null) vs [4] = ((IStateManager) updateParameters).SaveViewState ();
foreach (object o in vs)
if (o != null) return vs;
return null;
}
protected virtual void TrackViewState ()
{
tracking = true;
if (filterParameters != null) ((IStateManager) filterParameters).TrackViewState ();
if (selectParameters != null) ((IStateManager) selectParameters).TrackViewState ();
}
bool IStateManager.IsTrackingViewState {
get { return IsTrackingViewState; }
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
bool cancelSelectOnNullParameter = true;
public bool CancelSelectOnNullParameter {
get { return cancelSelectOnNullParameter; }
set {
if (CancelSelectOnNullParameter == value)
return;
cancelSelectOnNullParameter = value;
OnDataSourceViewChanged (EventArgs.Empty);
}
}
public override bool CanDelete {
get { return DeleteCommand != null && DeleteCommand != ""; }
}
public override bool CanInsert {
get { return InsertCommand != null && InsertCommand != ""; }
}
public override bool CanPage {
/* according to MS, this is false in all cases */
get { return false; }
}
public override bool CanRetrieveTotalRowCount {
/* according to MS, this is false in all cases */
get { return false; }
}
public override bool CanSort {
get {
/* we can sort if we're a DataSet, regardless of sort parameter name.
we can sort if we're a DataReader, if the sort parameter name is not null/"".
*/
return (owner.DataSourceMode == SqlDataSourceMode.DataSet
|| (SortParameterName != null && SortParameterName != ""));
}
}
public override bool CanUpdate {
get { return UpdateCommand != null && UpdateCommand != ""; }
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
ConflictOptions conflictDetection = ConflictOptions.OverwriteChanges;
public ConflictOptions ConflictDetection {
get { return conflictDetection; }
set {
if (ConflictDetection == value)
return;
conflictDetection = value;
OnDataSourceViewChanged (EventArgs.Empty);
}
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
string deleteCommand = String.Empty;
public string DeleteCommand {
get { return deleteCommand; }
set { deleteCommand = value; }
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
SqlDataSourceCommandType deleteCommandType = SqlDataSourceCommandType.Text;
public SqlDataSourceCommandType DeleteCommandType {
get { return deleteCommandType; }
set { deleteCommandType = value; }
}
[DefaultValueAttribute (null)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
[EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public ParameterCollection DeleteParameters {
get { return GetParameterCollection (ref deleteParameters, false, false); }
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
string filterExpression;
public string FilterExpression {
get { return filterExpression ?? string.Empty; }
set {
if (FilterExpression == value)
return;
filterExpression = value;
OnDataSourceViewChanged (EventArgs.Empty);
}
}
[EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
[DefaultValueAttribute (null)]
public ParameterCollection FilterParameters {
get { return GetParameterCollection (ref filterParameters, true, true); }
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
string insertCommand = String.Empty;
public string InsertCommand {
get { return insertCommand; }
set { insertCommand = value; }
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
SqlDataSourceCommandType insertCommandType = SqlDataSourceCommandType.Text;
public SqlDataSourceCommandType InsertCommandType {
get { return insertCommandType; }
set { insertCommandType = value; }
}
[EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
[DefaultValueAttribute (null)]
public ParameterCollection InsertParameters {
get { return GetParameterCollection (ref insertParameters, false, false); }
}
protected bool IsTrackingViewState {
get { return tracking; }
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
string oldValuesParameterFormatString = "{0}";
[DefaultValue ("{0}")]
public string OldValuesParameterFormatString {
get { return oldValuesParameterFormatString; }
set {
if (OldValuesParameterFormatString == value)
return;
oldValuesParameterFormatString = value;
OnDataSourceViewChanged (EventArgs.Empty);
}
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
string selectCommand;
public string SelectCommand {
get { return selectCommand != null ? selectCommand : string.Empty; }
set {
if (SelectCommand == value)
return;
selectCommand = value;
OnDataSourceViewChanged (EventArgs.Empty);
}
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
SqlDataSourceCommandType selectCommandType = SqlDataSourceCommandType.Text;
public SqlDataSourceCommandType SelectCommandType {
get { return selectCommandType; }
set { selectCommandType = value; }
}
public ParameterCollection SelectParameters {
get { return GetParameterCollection (ref selectParameters, true, true); }
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
string sortParameterName = String.Empty;
public string SortParameterName {
get { return sortParameterName; }
set {
if (SortParameterName == value)
return;
sortParameterName = value;
OnDataSourceViewChanged (EventArgs.Empty);
}
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
string updateCommand = String.Empty;
public string UpdateCommand {
get { return updateCommand; }
set { updateCommand = value; }
}
// LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
SqlDataSourceCommandType updateCommandType = SqlDataSourceCommandType.Text;
public SqlDataSourceCommandType UpdateCommandType {
get { return updateCommandType; }
set { updateCommandType = value; }
}
[EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
[DefaultValueAttribute (null)]
public ParameterCollection UpdateParameters {
get { return GetParameterCollection (ref updateParameters, false, false); }
}
void ParametersChanged (object source, EventArgs args)
{
OnDataSourceViewChanged (EventArgs.Empty);
}
ParameterCollection GetParameterCollection (ref ParameterCollection output, bool propagateTrackViewState, bool subscribeChanged)
{
if (output != null)
return output;
output = new ParameterCollection ();
if(subscribeChanged)
output.ParametersChanged += new EventHandler (ParametersChanged);
if (IsTrackingViewState && propagateTrackViewState)
((IStateManager) output).TrackViewState ();
return output;
}
protected virtual string ParameterPrefix {
get {
switch (owner.ProviderName) {
case "":
case "System.Data.SqlClient": return "@";
case "System.Data.OracleClient": return ":";
}
return "";
}
}
ParameterCollection deleteParameters;
ParameterCollection filterParameters;
ParameterCollection insertParameters;
ParameterCollection selectParameters;
ParameterCollection updateParameters;
bool tracking;
string name;
SqlDataSource owner;
#region OnDelete
static readonly object EventDeleted = new object ();
protected virtual void OnDeleted (SqlDataSourceStatusEventArgs e)
{
if (!HasEvents ()) return;
SqlDataSourceStatusEventHandler h = Events [EventDeleted] as SqlDataSourceStatusEventHandler;
if (h != null)
h (this, e);
}
public event SqlDataSourceStatusEventHandler Deleted {
add { Events.AddHandler (EventDeleted, value); }
remove { Events.RemoveHandler (EventDeleted, value); }
}
static readonly object EventDeleting = new object ();
protected virtual void OnDeleting (SqlDataSourceCommandEventArgs e)
{
if (!HasEvents ()) return;
SqlDataSourceCommandEventHandler h = Events [EventDeleting] as SqlDataSourceCommandEventHandler;
if (h != null)
h (this, e);
}
public event SqlDataSourceCommandEventHandler Deleting {
add { Events.AddHandler (EventDeleting, value); }
remove { Events.RemoveHandler (EventDeleting, value); }
}
#endregion
#region OnFiltering
static readonly object EventFiltering = new object ();
protected virtual void OnFiltering (SqlDataSourceFilteringEventArgs e)
{
if (!HasEvents ()) return;
SqlDataSourceFilteringEventHandler h = Events [EventFiltering] as SqlDataSourceFilteringEventHandler;
if (h != null)
h (this, e);
}
public event SqlDataSourceFilteringEventHandler Filtering {
add { Events.AddHandler (EventFiltering, value); }
remove { Events.RemoveHandler (EventFiltering, value); }
}
#endregion
#region OnInsert
static readonly object EventInserted = new object ();
protected virtual void OnInserted (SqlDataSourceStatusEventArgs e)
{
if (!HasEvents ()) return;
SqlDataSourceStatusEventHandler h = Events [EventInserted] as SqlDataSourceStatusEventHandler;
if (h != null)
h (this, e);
}
public event SqlDataSourceStatusEventHandler Inserted {
add { Events.AddHandler (EventInserted, value); }
remove { Events.RemoveHandler (EventInserted, value); }
}
static readonly object EventInserting = new object ();
protected virtual void OnInserting (SqlDataSourceCommandEventArgs e)
{
if (!HasEvents ()) return;
SqlDataSourceCommandEventHandler h = Events [EventInserting] as SqlDataSourceCommandEventHandler;
if (h != null)
h (this, e);
}
public event SqlDataSourceCommandEventHandler Inserting {
add { Events.AddHandler (EventInserting, value); }
remove { Events.RemoveHandler (EventInserting, value); }
}
#endregion
#region OnSelect
static readonly object EventSelected = new object ();
protected virtual void OnSelected (SqlDataSourceStatusEventArgs e)
{
if (!HasEvents ()) return;
SqlDataSourceStatusEventHandler h = Events [EventSelected] as SqlDataSourceStatusEventHandler;
if (h != null)
h (this, e);
}
public event SqlDataSourceStatusEventHandler Selected {
add { Events.AddHandler (EventSelected, value); }
remove { Events.RemoveHandler (EventSelected, value); }
}
static readonly object EventSelecting = new object ();
protected virtual void OnSelecting (SqlDataSourceSelectingEventArgs e)
{
if (!HasEvents ()) return;
SqlDataSourceSelectingEventHandler h = Events [EventSelecting] as SqlDataSourceSelectingEventHandler;
if (h != null)
h (this, e);
}
public event SqlDataSourceSelectingEventHandler Selecting {
add { Events.AddHandler (EventSelecting, value); }
remove { Events.RemoveHandler (EventSelecting, value); }
}
#endregion
#region OnUpdate
static readonly object EventUpdated = new object ();
protected virtual void OnUpdated (SqlDataSourceStatusEventArgs e)
{
if (owner.EnableCaching)
owner.Cache.Expire ();
if (!HasEvents ()) return;
SqlDataSourceStatusEventHandler h = Events [EventUpdated] as SqlDataSourceStatusEventHandler;
if (h != null)
h (this, e);
}
public event SqlDataSourceStatusEventHandler Updated {
add { Events.AddHandler (EventUpdated, value); }
remove { Events.RemoveHandler (EventUpdated, value); }
}
static readonly object EventUpdating = new object ();
protected virtual void OnUpdating (SqlDataSourceCommandEventArgs e)
{
if (!HasEvents ()) return;
SqlDataSourceCommandEventHandler h = Events [EventUpdating] as SqlDataSourceCommandEventHandler;
if (h != null)
h (this, e);
}
public event SqlDataSourceCommandEventHandler Updating {
add { Events.AddHandler (EventUpdating, value); }
remove { Events.RemoveHandler (EventUpdating, value); }
}
#endregion
}
}
#endif
|