昨天的问题,DataGrid的TableStyle的确是一个很复杂的结构,而clone的实现应该是基于prototype模式的,昨天回家的路上感觉还是有点不爽,使用prototype解决这个问题,不是不可以,但是不是很好,应验了Richard的一句话,"There is no right or wrong, but good or bad."(不是原话,意思而已)也正因为Richard说过"Just make it good enough",我还是想改它,参考了一下Builder模式,写了一个不伦不类的Builder,见笑了。

先说下我对prototype的疑虑:
1、MS并没有将TableStyle做成可以clone的,可见这个东西不适合clone;
2、TableStyle太复杂,clone起来自然也简单不了,基本解决不了问题在clone里,还是乱七八糟。

唉,不知道怎么,坐在电脑前永远也想不了问题,习惯性的在键盘上狂敲而已。

下面看看我的不伦不类的Builder吧,赫赫,见笑了继续昨天的问题。



继续昨天的问题。 * Copyright (c) runmin@tom.com
继续昨天的问题。 * Sample code, created on 2004-12-15 8:57:15 by runmin.
继续昨天的问题。 * */
继续昨天的问题。
#endregion Copyright
继续昨天的问题。

继续昨天的问题。
using System.Windows.Forms;
继续昨天的问题。
#endregion
继续昨天的问题。
继续昨天的问题。
namespace Runmin.Sample
{

继续昨天的问题。    
/// Returns an instance of System.Windows.Forms.DataGridTableStyle class.
继续昨天的问题。    
/// </summary>
继续昨天的问题。    public interface ITableStyleBuilder
{

继续昨天的问题。        
/// The builder method.
继续昨天的问题。        
/// </summary>
继续昨天的问题。        
/// <returns>TableStyle instance</returns>
继续昨天的问题。        DataGridTableStyle BuildStyle(string theMappingName);
继续昨天的问题。    }

继续昨天的问题。
继续昨天的问题。    
public class DefaultTableStyleBuilder : ITableStyleBuilder
{
继续昨天的问题。        
private DisplayStyle displayStyle;
继续昨天的问题。        
public DisplayStyle DisplayStyle
{
继续昨天的问题。            
get
{
继续昨天的问题。                
return this.displayStyle;
继续昨天的问题。            }

继续昨天的问题。            
set
{
继续昨天的问题。                
this.displayStyle = value;
继续昨天的问题。            }

继续昨天的问题。        }

继续昨天的问题。
继续昨天的问题。
继续昨天的问题。        
private DataGridColumnStyle gridColumnStyle;
继续昨天的问题。        
public DataGridColumnStyle GridColumnStyle
{
继续昨天的问题。            
get
{
继续昨天的问题。                
return this.gridColumnStyle;
继续昨天的问题。            }

继续昨天的问题。            
set
{
继续昨天的问题。                
this.gridColumnStyle = value;
继续昨天的问题。            }

继续昨天的问题。        }

继续昨天的问题。
继续昨天的问题。
继续昨天的问题。        
public virtual DataGridTableStyle BuildStyle(string theMappingName)
{
继续昨天的问题。            DataGridTableStyle theTableStyle 
= new DataGridTableStyle();
继续昨天的问题。
继续昨天的问题。            theTableStyle.MappingName 
= theMappingName;
继续昨天的问题。
继续昨天的问题。            theTableStyle.ForeColor 
= 
继续昨天的问题。                theTableStyle.HeaderForeColor 
= 
继续昨天的问题。                theTableStyle.SelectionForeColor 
= 
继续昨天的问题。                
this.displayStyle.ForeColor;
继续昨天的问题。
继续昨天的问题。            theTableStyle.BackColor            
= this.displayStyle.BackColor;
继续昨天的问题。            theTableStyle.HeaderBackColor      
= this.displayStyle.HeaderBackColor;
继续昨天的问题。            theTableStyle.GridLineColor        
= this.displayStyle.GridLineColor;
继续昨天的问题。            theTableStyle.SelectionBackColor   
= this.displayStyle.SelectionBackColor;
继续昨天的问题。
继续昨天的问题。            
return theTableStyle;
继续昨天的问题。        }

继续昨天的问题。
继续昨天的问题。    }

继续昨天的问题。
继续昨天的问题。    
public struct DisplayStyle
{
继续昨天的问题。        
private System.Drawing.Color backColor;
继续昨天的问题。        
public System.Drawing.Color BackColor
{
继续昨天的问题。            
get
{
继续昨天的问题。                
return backColor;
继续昨天的问题。            }

继续昨天的问题。
继续昨天的问题。            
set
{
继续昨天的问题。                backColor 
= value;
继续昨天的问题。            }

继续昨天的问题。        }

继续昨天的问题。
继续昨天的问题。        
private System.Drawing.Color foreColor;
继续昨天的问题。        
public System.Drawing.Color ForeColor
{
继续昨天的问题。            
get
{
继续昨天的问题。                
return foreColor;
继续昨天的问题。            }

继续昨天的问题。
继续昨天的问题。            
set
{
继续昨天的问题。                foreColor 
= value;
继续昨天的问题。            }

继续昨天的问题。        }

继续昨天的问题。
继续昨天的问题。        
private System.Drawing.Color gridLineColor;
继续昨天的问题。        
public System.Drawing.Color GridLineColor
{
继续昨天的问题。            
get
{
继续昨天的问题。                
return gridLineColor;
继续昨天的问题。            }

继续昨天的问题。
继续昨天的问题。            
set
{
继续昨天的问题。                gridLineColor 
= value;
继续昨天的问题。            }

继续昨天的问题。        }

继续昨天的问题。
继续昨天的问题。        
private System.Drawing.Color headerBackColor;
继续昨天的问题。        
public System.Drawing.Color HeaderBackColor
{
继续昨天的问题。            
get
{
继续昨天的问题。                
return headerBackColor;
继续昨天的问题。            }

继续昨天的问题。
继续昨天的问题。            
set
{
继续昨天的问题。                headerBackColor 
= value;
继续昨天的问题。            }

继续昨天的问题。        }

继续昨天的问题。
继续昨天的问题。        
private System.Drawing.Color selectionBackColor;
继续昨天的问题。        
public System.Drawing.Color SelectionBackColor
{
继续昨天的问题。            
get
{
继续昨天的问题。                
return selectionBackColor;
继续昨天的问题。            }

继续昨天的问题。
继续昨天的问题。            
set
{
继续昨天的问题。                selectionBackColor 
= value;
继续昨天的问题。            }

继续昨天的问题。        }

继续昨天的问题。
继续昨天的问题。        
private System.Drawing.Color alternatingBackColor;
继续昨天的问题。        
public System.Drawing.Color AlternatingBackColor
{
继续昨天的问题。            
get
{
继续昨天的问题。                
return alternatingBackColor;
继续昨天的问题。            }

继续昨天的问题。
继续昨天的问题。            
set
{
继续昨天的问题。                alternatingBackColor 
= value;
继续昨天的问题。            }

继续昨天的问题。        }

继续昨天的问题。    }

继续昨天的问题。}

继续昨天的问题。

相关文章: