New test.
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / FormView.cs
index 5f40340d519e90c85e505067c22f47d7d811b386..ea63e1d7ea26f52820143b2e5ee28bf50c3d2abb 100644 (file)
@@ -105,8 +105,8 @@ namespace System.Web.UI.WebControls
                int pageCount = 0;
                
                public FormView ()
-               {\r
-                       key = new DataKey (new OrderedDictionary ());\r
+               {
+                       key = new DataKey (new OrderedDictionary ());
                }
                
                public event EventHandler PageIndexChanged {
@@ -344,9 +344,9 @@ namespace System.Web.UI.WebControls
                                if (o != null) return (int) o;
                                return -1;
                        }
-                       set {\r
-                               if (value < -1)\r
-                                       throw new ArgumentOutOfRangeException ("< -1");\r
+                       set {
+                               if (value < -1)
+                                       throw new ArgumentOutOfRangeException ("< -1");
                                ViewState ["CellPadding"] = value;
                                RequireBinding ();
                        }
@@ -361,9 +361,9 @@ namespace System.Web.UI.WebControls
                                if (o != null) return (int) o;
                                return 0;
                        }
-                       set {\r
-                               if (value < -1)\r
-                                       throw new ArgumentOutOfRangeException ("< -1");\r
+                       set {
+                               if (value < -1)
+                                       throw new ArgumentOutOfRangeException ("< -1");
                                ViewState["CellSpacing"] = value;
                                RequireBinding ();
                        }
@@ -375,22 +375,22 @@ namespace System.Web.UI.WebControls
                        get {
                                return currentMode;
                        }
-               }\r
-\r
+               }
+
                FormViewMode defaultMode;
 
                [DefaultValueAttribute (FormViewMode.ReadOnly)]
                [WebCategoryAttribute ("Behavior")]
                public virtual FormViewMode DefaultMode {
-                       get {\r
+                       get {
                                return defaultMode;
                        }
                        set {
                                defaultMode = value;
                                RequireBinding ();
                        }
-               }\r
-\r
+               }
+
                string[] dataKeyNames;
                [DefaultValueAttribute (null)]
                [WebCategoryAttribute ("Data")]
@@ -400,7 +400,7 @@ namespace System.Web.UI.WebControls
                {
                        get {
                                if (dataKeyNames == null)
-                                       return emptyKeys;\r
+                                       return emptyKeys;
                                return dataKeyNames;
                        }
                        set {
@@ -535,11 +535,11 @@ namespace System.Web.UI.WebControls
                [WebCategoryAttribute ("Appearance")]
                [DefaultValueAttribute (GridLines.None)]
                public virtual GridLines GridLines {
-                       get {\r
-                               return ((TableStyle) ControlStyle).GridLines;\r
+                       get {
+                               return ((TableStyle) ControlStyle).GridLines;
                        }
-                       set {\r
-                               ((TableStyle) ControlStyle).GridLines = value;\r
+                       set {
+                               ((TableStyle) ControlStyle).GridLines = value;
                        }
                }
 
@@ -765,15 +765,19 @@ namespace System.Web.UI.WebControls
                [BrowsableAttribute (false)]
                public virtual int DataItemIndex {
                        get { return PageIndex; }
-               }               
+               }
+
+               int IDataItemContainer.DataItemIndex {
+                       get { return DataItemIndex; }
+               }
        
                int IDataItemContainer.DisplayIndex {
                        get { return PageIndex; }
                }               
        
                public virtual bool IsBindableType (Type type)
-               {\r
-                       return type.IsPrimitive || type == typeof (string) || type == typeof (DateTime) || type == typeof (Guid) || type == typeof (Decimal);\r
+               {
+                       return type.IsPrimitive || type == typeof (string) || type == typeof (DateTime) || type == typeof (Guid) || type == typeof (Decimal);
                }
                
                protected override DataSourceSelectArguments CreateDataSourceSelectArguments ()
@@ -815,10 +819,10 @@ namespace System.Web.UI.WebControls
                }
        
                protected override Style CreateControlStyle ()
-               {\r
-                       TableStyle style = new TableStyle (ViewState);\r
-                       style.CellSpacing = 0;\r
-                       return style;\r
+               {
+                       TableStyle style = new TableStyle (ViewState);
+                       style.CellSpacing = 0;
+                       return style;
                }
                
                protected override int CreateChildControls (IEnumerable data, bool dataBinding)
@@ -839,7 +843,7 @@ namespace System.Web.UI.WebControls
                        }
 
                        pageCount = dataSource.DataSourceCount;
-                       bool showPager = AllowPaging && (dataSource.Count > 0);
+                       bool showPager = AllowPaging && (pageCount > 1);
                        
                        Controls.Clear ();
                        table = CreateTable ();
@@ -890,7 +894,7 @@ namespace System.Web.UI.WebControls
                        } else {
                                switch (CurrentMode) {
                                case FormViewMode.Edit:
-                                       itemRow = CreateRow (-1, DataControlRowType.DataRow, DataControlRowState.Edit);
+                                       itemRow = CreateRow (-1, DataControlRowType.EmptyDataRow, DataControlRowState.Edit);
                                        break;
                                case FormViewMode.Insert:
                                        itemRow = CreateRow (-1, DataControlRowType.DataRow, DataControlRowState.Insert);
@@ -937,7 +941,7 @@ namespace System.Web.UI.WebControls
                        if (pagerTemplate != null)
                                pagerTemplate.InstantiateIn (cell);
                        else
-                               cell.Controls.Add (PagerSettings.CreatePagerControl (dataSource.CurrentPageIndex, dataSource.PageCount));
+                               cell.Controls.Add (PagerSettings.CreatePagerControl (dataSource.CurrentPageIndex, dataSource.PageCount, pagerStyle));
                        
                        row.Cells.Add (cell);
                }
@@ -1009,8 +1013,8 @@ namespace System.Web.UI.WebControls
                }
                
                protected virtual void ExtractRowValues (IOrderedDictionary fieldValues, bool includeKeys)
-               {\r
-                       if (Row == null)\r
+               {
+                       if (Row == null)
                                return;
 
                        DataControlRowState rowState = Row.RowState;
@@ -1040,6 +1044,12 @@ namespace System.Web.UI.WebControls
                
                public sealed override void DataBind ()
                {
+                       if (CurrentMode == FormViewMode.Insert) {
+                               RequiresDataBinding = false;
+                               PerformDataBinding (new object [] { null });
+                               return;
+                       }
+                       
                        DataSourceView view = GetData ();
                        if (AllowPaging && view.CanPage) {
                                SelectArguments.StartRowIndex = PageIndex;
@@ -1054,6 +1064,8 @@ namespace System.Web.UI.WebControls
                        if (pageCount > 0) {
                                if (CurrentMode == FormViewMode.Edit)
                                        oldEditValues = new DataKey (GetRowValues (true));
+                               else
+                                       oldEditValues = new DataKey (new OrderedDictionary ());
                                key = new DataKey (CreateRowDataKey (dataItem), DataKeyNames);
                        }
                }
@@ -1113,13 +1125,15 @@ namespace System.Web.UI.WebControls
                                        newIndex = PageCount - 1;
                                        break;
                                case DataControlCommands.NextPageCommandArgument:
-                                       if (PageIndex < PageCount - 1) newIndex = PageIndex + 1;
+                                       newIndex = PageIndex + 1;
                                        break;
                                case DataControlCommands.PreviousPageCommandArgument:
-                                       if (PageIndex > 0) newIndex = PageIndex - 1;
+                                       newIndex = PageIndex - 1;
                                        break;
                                default:
-                                       newIndex = int.Parse (param) - 1;
+                                       int paramIndex = 0;
+                                       int.TryParse (param, out paramIndex);
+                                       newIndex = paramIndex - 1;
                                        break;
                                }
                                ShowPage (newIndex);
@@ -1177,7 +1191,7 @@ namespace System.Web.UI.WebControls
                                newIndex = args.NewPageIndex;
                                if (newIndex < 0 || newIndex >= PageCount)
                                        return;
-                               EndRowEdit ();
+                               EndRowEdit (false);
                                PageIndex = newIndex;
                                OnPageIndexChanged (EventArgs.Empty);
                        }
@@ -1223,9 +1237,12 @@ namespace System.Web.UI.WebControls
                        OnItemUpdating (args);
                        if (!args.Cancel) {
                                DataSourceView view = GetData ();
-                               if (view == null) throw new HttpException ("The DataSourceView associated to data bound control was null");
-                               view.Update (currentEditRowKeys, currentEditNewValues, currentEditOldValues, new DataSourceViewOperationCallback (UpdateCallback));
-                       } else
+                               if (view == null)
+                                       throw new HttpException ("The DataSourceView associated to data bound control was null");
+                               if (view.CanUpdate)
+                                       view.Update (currentEditRowKeys, currentEditNewValues, currentEditOldValues, new DataSourceViewOperationCallback (UpdateCallback));
+                       }
+                       else
                                EndRowEdit ();
                }
 
@@ -1257,10 +1274,12 @@ namespace System.Web.UI.WebControls
                        OnItemInserting (args);
                        if (!args.Cancel) {
                                DataSourceView view = GetData ();
-                               if (view == null) 
-                                       return;
-                               view.Insert (currentEditNewValues, new DataSourceViewOperationCallback (InsertCallback));
-                       } else
+                               if (view == null)
+                                       throw new HttpException ("The DataSourceView associated to data bound control was null");
+                               if (view.CanInsert)
+                                       view.Insert (currentEditNewValues, new DataSourceViewOperationCallback (InsertCallback));
+                       }
+                       else
                                EndRowEdit ();
                }
                
@@ -1290,7 +1309,7 @@ namespace System.Web.UI.WebControls
                                RequireBinding ();
                                        
                                DataSourceView view = GetData ();
-                               if (view != null)
+                               if (view != null && view.CanDelete)
                                        view.Delete (currentEditRowKeys, currentEditNewValues, new DataSourceViewOperationCallback (DeleteCallback));
                                else {
                                        FormViewDeletedEventArgs dargs = new FormViewDeletedEventArgs (0, null, currentEditRowKeys, currentEditNewValues);
@@ -1308,7 +1327,13 @@ namespace System.Web.UI.WebControls
                
                void EndRowEdit ()
                {
-                       ChangeMode (DefaultMode);
+                       EndRowEdit (true);
+               }
+
+               void EndRowEdit (bool switchToDefaultMode) 
+               {
+                       if (switchToDefaultMode)
+                               ChangeMode (DefaultMode);
                        oldEditValues = new DataKey (new OrderedDictionary ());
                        currentEditRowKeys = null;
                        currentEditOldValues = null;
@@ -1323,14 +1348,14 @@ namespace System.Web.UI.WebControls
                        base.LoadControlState (state[0]);
                        pageIndex = (int) state[1];
                        pageCount = (int) state[2];
-                       currentMode = (FormViewMode) state[3];\r
-                       defaultMode = (FormViewMode) state[4];\r
+                       currentMode = (FormViewMode) state[3];
+                       defaultMode = (FormViewMode) state[4];
                        dataKeyNames = (string[]) state[5];
                }
                
                protected internal override object SaveControlState ()
                {
-                       object bstate = base.SaveControlState ();\r
+                       object bstate = base.SaveControlState ();
                        return new object[] {
                                bstate, pageIndex, pageCount, currentMode, defaultMode, dataKeyNames
                        };
@@ -1419,9 +1444,9 @@ namespace System.Web.UI.WebControls
                        
                        writer.AddAttribute (HtmlTextWriterAttribute.Cellspacing, "0");
                        if (!string.IsNullOrEmpty (ControlStyle.CssClass))
-                               writer.AddAttribute (HtmlTextWriterAttribute.Class, ControlStyle.CssClass);\r
-\r
-                       table.ControlStyle.MergeWith (ControlStyle);\r
+                               writer.AddAttribute (HtmlTextWriterAttribute.Class, ControlStyle.CssClass);
+
+                       table.ControlStyle.MergeWith (ControlStyle);
                        table.RenderBeginTag (writer);
                        
                        foreach (FormViewRow row in table.Rows)