96 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Windows.Forms;
 | 
						|
 | 
						|
// code from Bill McCarthy
 | 
						|
// http://msmvps.com/bill/archive/2005/10/05/69012.aspx
 | 
						|
// used with permission
 | 
						|
 | 
						|
namespace Csla.Windows
 | 
						|
{
 | 
						|
  /// <summary>
 | 
						|
  /// Windows Forms extender control that resolves the
 | 
						|
  /// data refresh issue with data bound detail controls
 | 
						|
  /// as discussed in Chapter 5.
 | 
						|
  /// </summary>
 | 
						|
  [DesignerCategory("")]
 | 
						|
  [ProvideProperty("ReadValuesOnChange", typeof(BindingSource))]
 | 
						|
  public class BindingSourceRefresh : Component, IExtenderProvider
 | 
						|
  {
 | 
						|
 | 
						|
    private Dictionary<BindingSource, bool> _sources = new Dictionary<BindingSource, bool>();
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Creates an instance of the object.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="container">Container of the control.</param>
 | 
						|
    public BindingSourceRefresh(IContainer container)
 | 
						|
    {
 | 
						|
      container.Add(this);
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets a value indicating whether the extender control
 | 
						|
    /// can extend the specified control.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="extendee">The control to be extended.</param>
 | 
						|
    /// <remarks>
 | 
						|
    /// This control only extends <see cref="BindingSource"/> controls.
 | 
						|
    /// </remarks>
 | 
						|
    public bool CanExtend(object extendee)
 | 
						|
    {
 | 
						|
      if (extendee is BindingSource)
 | 
						|
        return true;
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets the value of the custom ReadValuesOnChange extender
 | 
						|
    /// property added to extended controls.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="source">Control being extended.</param>
 | 
						|
    public bool GetReadValuesOnChange(BindingSource source)
 | 
						|
    {
 | 
						|
      if (_sources.ContainsKey(source))
 | 
						|
        return _sources[source];
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Sets the value of the custom ReadValuesOnChange extender
 | 
						|
    /// property added to extended controls.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="source">Control being extended.</param>
 | 
						|
    /// <param name="value">New value of property.</param>
 | 
						|
    /// <remarks></remarks>
 | 
						|
    public void SetReadValuesOnChange(
 | 
						|
      BindingSource source, bool value)
 | 
						|
    {
 | 
						|
      if (_sources.ContainsKey(source))
 | 
						|
        _sources[source] = value;
 | 
						|
      else
 | 
						|
        _sources.Add(source, value);
 | 
						|
      if (value)
 | 
						|
      {
 | 
						|
        // hook
 | 
						|
        source.BindingComplete += 
 | 
						|
          new BindingCompleteEventHandler(Source_BindingComplete);
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
        // unhook
 | 
						|
        source.BindingComplete -= 
 | 
						|
          new BindingCompleteEventHandler(Source_BindingComplete);
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    private void Source_BindingComplete(
 | 
						|
      object sender, BindingCompleteEventArgs e)
 | 
						|
    {
 | 
						|
      e.Binding.ReadValue();
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
}
 |