Author: husted
Date: Thu Nov 10 11:45:00 2005
New Revision: 332359

URL: http://svn.apache.org/viewcvs?rev=332359&view=rev
Log:
OVR-21
* Add support for custom templates

Modified:
    struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs

Modified: struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs?rev=332359&r1=332358&r2=332359&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs Thu Nov 10 
11:45:00 2005
@@ -189,20 +189,11 @@
                        set { _DataKeyField = value; }
                }
 
-               private IList _DataFields;
-
-               public virtual IList DataFields
-               {
-                       get { return _DataFields; }
-                       set { _DataFields = value; }
-               }
-
-               private IList _DataLabels;
-
-               public virtual IList DataLabels
+               private IList _Configs; 
+               public virtual IList Configs
                {
-                       get { return _DataLabels; }
-                       set { _DataLabels = value; }
+                       get {return _Configs;}
+                       set {_Configs = value;}
                }
 
                #endregion
@@ -325,31 +316,41 @@
                {
                        DataGrid grid = Grid;
                        grid.DataKeyField = DataKeyField;
-                       int colCount = DataFields.Count;
-                       int lblCount = DataLabels.Count;
+                       IList configs = Configs;
+                       int colCount = configs.Count;
                        for (int c = 0; c < colCount; c++)
                        {
-                               string column = DataFields[c] as string;
-                               string label = (lblCount < c) ? column : 
DataLabels[c] as string;
-                               i = BindColumn(i, label, column);
+                               IGridConfig config = configs[c] as IGridConfig;
+                               if (config.HasTemplate)
+                               {
+                                       i = BindTemplateColumn(i, config);
+                               }
+                               else i = BindColumn(i, config);
                        }
                        return i;
                }
 
-               protected int BindColumn(int pos, string headerText, string 
dataField, string sortExpression, string dataFormat)
+               protected int BindColumn(int pos, IGridConfig config)
                {
                        BoundColumn column = new BoundColumn();
-                       column.HeaderText = headerText;
-                       column.DataField = dataField;
-                       column.SortExpression = sortExpression; // See 
DataGridColumn.SortExpression Property
-                       column.DataFormatString = dataFormat; // See Formatting 
Types in .NET Dev Guide
+                       column.HeaderText = config.HeaderText;
+                       column.DataField = config.DataField;
+                       // column.SortExpression = config.sortExpression; // 
See DataGridColumn.SortExpression Property
+                       // column.DataFormatString = config.dataFormat; // See 
Formatting Types in .NET Dev Guide
                        Grid.Columns.AddAt(pos, column);
                        return pos + 1;
                }
 
-               public int BindColumn(int pos, string headerText, string 
dataField)
+               protected int BindTemplateColumn(int pos, IGridConfig config)
                {
-                       return BindColumn(pos, headerText, dataField, 
String.Empty, String.Empty);
+                       TemplateColumn column = new TemplateColumn();
+                       column.HeaderText = config.HeaderText;
+                       column.ItemTemplate = config.ItemTemplate;
+                       column.EditItemTemplate = config.EditItemTemplate;
+                       // column.SortExpression = config.sortExpression; // 
See DataGridColumn.SortExpression Property
+                       // column.DataFormatString = config.dataFormat; // See 
Formatting Types in .NET Dev Guide
+                       Grid.Columns.AddAt(pos, column);
+                       return pos + 1;
                }
 
                private bool bind = true;
@@ -487,8 +488,9 @@
                        IViewHelper h = GetHelperFor(SaveCommand);
                        if (h.IsNominal)
                        {
+                               IList configs = Configs;
                                h.Criteria[DataKeyField] = key;
-                               int cols = DataFields.Count;
+                               int cols = configs.Count;
                                string[] keys = new string[2 + cols];
                                // reconstruct the standard edit column keys
                                // just as placeholders, really
@@ -497,7 +499,7 @@
                                int index = 2;
                                // append our field names to the array of keys
                                for (int i = 0; i < cols; i++)
-                                       keys[index++] = DataFields[i] as string;
+                                       keys[index++] = (configs[i] as 
IGridConfig).DataField;
                                ReadGridControls(controls, h.Criteria, keys, 
true);
                                h.Execute();
                        }
@@ -914,8 +916,138 @@
                }
 
                #endregion
-       }
 
+               #region Templates
+
+               public interface IGridConfig
+               {
+                       string DataField {get;}
+                       string HeaderText {get;}
+                       ITemplate ItemTemplate {get;set;}
+                       ITemplate EditItemTemplate {get;set;}
+                       bool HasTemplate {get;}
+               }
+
+               public class GridConfig : IGridConfig
+               {
+                       /// <summary>
+                       /// Attribute name (required).
+                       /// </summary>
+                       /// 
+                       private string _DataField;
+                       public string DataField
+                       {
+                               get { return _DataField; }
+                       }
+
+                       /// <summary>
+                       /// Heading for this attribute (optional).
+                       /// </summary>
+                       /// 
+                       private string _HeaderText;
+                       public string HeaderText
+                       {
+                               get 
+                               {
+                                       if (_HeaderText==null) return 
DataField; 
+                                       return _HeaderText;
+                               }
+                       }
+
+                       /// <summary>
+                       /// Item template for this attribute (optional).
+                       /// </summary>
+                       private ITemplate _ItemTemplate;
+                       public ITemplate ItemTemplate
+                       {
+                               get {return _ItemTemplate;}
+                               set {_ItemTemplate = value;}
+                       }
+
+                       /// <summary>
+                       /// Edit template for this attribute (optional).
+                       /// </summary>
+                       private ITemplate _EditItemTemplate;
+                       public ITemplate EditItemTemplate
+                       {
+                               get {return _EditItemTemplate;}
+                               set {_EditItemTemplate = value;}
+                       }
+
+                       // string DataFormat;
+                       // string SortFormat;
+                       // ITemplate ItemFormat;
+
+                       public bool HasTemplate
+                       {
+                               get {return (_ItemTemplate != null) || 
(_EditItemTemplate != null);}
+                       }
+                       
+                       public GridConfig(string dataField, string headerText)
+                       {
+                               _DataField = dataField;
+                               _HeaderText = headerText;
+                       }
+
+                       public GridConfig(string dataField, string headerText, 
ITemplate itemTemplate, ITemplate editItemTemplate)
+                       {
+                               _DataField = dataField;
+                               _HeaderText = headerText;
+                               _ItemTemplate = itemTemplate;
+                               _EditItemTemplate = editItemTemplate;
+                       }
+               }
+
+
+               public class LiteralTemplate : ITemplate
+               {
+
+                       private string _DataField;
+
+                       private void LiteralTemplate_DataBinding(object sender, 
EventArgs e)
+                       {
+                               Literal lc;
+                               lc = (Literal) sender;
+                               DataGridItem container = (DataGridItem) 
lc.NamingContainer;
+                               lc.Text = DataBinder.Eval(container.DataItem, 
_DataField) as string;
+                       }
+
+                       public void InstantiateIn(Control container)
+                       {
+                               Literal lc = new Literal();
+                               lc.DataBinding += new 
EventHandler(LiteralTemplate_DataBinding);
+                               container.Controls.Add(lc);
+                       }
+
+                       public LiteralTemplate (string dataField)
+                       {
+                               _DataField = dataField;
+                               
+                       }
+               }
+               
+               public class DropDownListTemplate : ITemplate
+               {
+                       
+                       private DropDownList _List;
+
+                       public void InstantiateIn(Control container)
+                       {
+                               container.Controls.Add(_List);
+                       }
+
+                       public DropDownListTemplate(object dataSource)
+                       {
+                               _List = new DropDownList();
+                               _List.DataSource = dataSource;
+                               _List.DataBind();
+                       }
+               }
+               
+               
+               #endregion
+       
+       }
 
        /* 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to