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
 | |
|   }
 | |
| }
 |