104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.Data;
 | 
						|
using System.Data.SqlClient;
 | 
						|
using Csla;
 | 
						|
using Csla.Data;
 | 
						|
 | 
						|
namespace ProjectTracker.Library
 | 
						|
{
 | 
						|
  [Serializable()]
 | 
						|
  public class ProjectList : 
 | 
						|
    ReadOnlyListBase<ProjectList, ProjectInfo>
 | 
						|
  {
 | 
						|
    #region Factory Methods
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Return a list of all projects.
 | 
						|
    /// </summary>
 | 
						|
    public static ProjectList GetProjectList()
 | 
						|
    {
 | 
						|
      return DataPortal.Fetch<ProjectList>(new Criteria());
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Return a list of projects filtered
 | 
						|
    /// by project name.
 | 
						|
    /// </summary>
 | 
						|
    public static ProjectList GetProjectList(string name)
 | 
						|
    {
 | 
						|
      return DataPortal.Fetch<ProjectList>
 | 
						|
        (new FilteredCriteria(name));
 | 
						|
    }
 | 
						|
 | 
						|
    private ProjectList()
 | 
						|
    { /* require use of factory methods */ }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region Data Access
 | 
						|
 | 
						|
    [Serializable()]
 | 
						|
    private class Criteria
 | 
						|
    { /* no criteria - retrieve all projects */ }
 | 
						|
 | 
						|
    [Serializable()]
 | 
						|
    private class FilteredCriteria
 | 
						|
    {
 | 
						|
      private string _name;
 | 
						|
      public string Name
 | 
						|
      {
 | 
						|
        get { return _name; }
 | 
						|
      }
 | 
						|
 | 
						|
      public FilteredCriteria(string name)
 | 
						|
      {
 | 
						|
        _name = name;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    private void DataPortal_Fetch(Criteria criteria)
 | 
						|
    {
 | 
						|
      // fetch with no filter
 | 
						|
      Fetch("");
 | 
						|
    }
 | 
						|
 | 
						|
    private void DataPortal_Fetch(FilteredCriteria criteria)
 | 
						|
    {
 | 
						|
      Fetch(criteria.Name);
 | 
						|
    }
 | 
						|
 | 
						|
    private void Fetch(string nameFilter)
 | 
						|
    {
 | 
						|
      this.RaiseListChangedEvents = false;
 | 
						|
      using (SqlConnection cn = new SqlConnection(Database.PTrackerConnection))
 | 
						|
      {
 | 
						|
        cn.Open();
 | 
						|
        using (SqlCommand cm = cn.CreateCommand())
 | 
						|
        {
 | 
						|
          cm.CommandType = CommandType.StoredProcedure;
 | 
						|
          cm.CommandText = "getProjects";
 | 
						|
          using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
 | 
						|
          {
 | 
						|
            IsReadOnly = false;
 | 
						|
            while (dr.Read())
 | 
						|
            {
 | 
						|
              ProjectInfo info = new ProjectInfo(
 | 
						|
                dr.GetGuid(0),
 | 
						|
                dr.GetString(1));
 | 
						|
              // apply filter if necessary
 | 
						|
              if ((nameFilter.Length == 0) || (info.Name.IndexOf(nameFilter) == 0))
 | 
						|
                this.Add(info);
 | 
						|
            }
 | 
						|
            IsReadOnly = true;
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
      this.RaiseListChangedEvents = true;
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
  }
 | 
						|
}
 |