[eglib] Prefer <langinfo.h> to <localcharset.h>
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / GridViewTest.cs
1 //
2 // Tests for System.Web.UI.WebControls.GridView.cs
3 //
4 // Author:
5 //      Tal Klahr (talk@mainsoft.com)
6 //      Yoni Klain (yonik@mainsoft.com)
7 //
8 // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 // NOT TESTED :
29 // ondatasourceviewchanged(),onpagepreload(),RaiseCallbackEvent(),RaisePostbackEvent  
30
31
32
33
34 using NUnit.Framework;
35 using System;
36 using System.IO;
37 using System.Globalization;
38 using System.Web;
39 using System.Web.UI;
40 using System.Web.UI.WebControls;
41 using System.Collections;
42 using MonoTests.SystemWeb.Framework;
43 using MonoTests.stand_alone.WebHarness;
44 using MyWebControl = System.Web.UI.WebControls;
45 using System.Data;
46 using System.Drawing;
47 using System.Threading;
48 using System.Collections.Generic;
49
50 namespace MonoTests.System.Web.UI.WebControls
51 {
52         class PokerGridView : GridView
53         {
54                 public bool ifPagerInitilized;
55                 public bool dataPropertyChanged;
56                 public bool pagePreLoad;
57                 public bool controlHierarchy;
58
59                 public PokerGridView ()
60                 {
61                         TrackViewState ();
62                 }
63
64                 public object SaveState ()
65                 {
66                         return SaveViewState ();
67                 }
68
69                 public void LoadState (object o)
70                 {
71                         LoadViewState (o);
72                 }
73
74                 public StateBag StateBag
75                 {
76                         get { return base.ViewState; }
77                 }
78
79                 public HtmlTextWriterTag PTagKey
80                 {
81                         get { return base.TagKey;}
82                 }
83
84                 public string Render ()
85                 {
86                         StringWriter sw = new StringWriter ();
87                         HtmlTextWriter tw = new HtmlTextWriter (sw);
88                         Render (tw);
89                         return sw.ToString ();
90                 }
91
92                 public AutoGeneratedField DoCreateAutoGeneratedColumn (AutoGeneratedFieldProperties fieldProperties)
93                 {
94                         return base.CreateAutoGeneratedColumn (fieldProperties);
95                 }
96
97                 public int DoCreateChildControls (IEnumerable dataSource, bool dataBinding)
98                 {
99                         return base.CreateChildControls (dataSource, dataBinding);
100                 }
101
102                 public Table DoCreateChildTable ()
103                 {
104                         return base.CreateChildTable ();
105                 }
106
107                 public ICollection DoCreateColumns (PagedDataSource dataSource, bool useDataSource)
108                 {
109                         return base.CreateColumns (dataSource, useDataSource);
110                 }
111
112                 public Style DoCreateControlStyle ()
113                 {
114                         return base.CreateControlStyle ();
115                 }
116
117                 public DataSourceSelectArguments DoCreateDataSourceSelectArguments ()
118                 {
119                         return CreateDataSourceSelectArguments();
120                 }
121
122                 public DataSourceView DoGetData ()
123                 {
124                         return GetData ();
125                 }
126
127                 public GridViewRow doCreateRow (int rowIndex, int dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState)
128                 {
129                         return base.CreateRow (rowIndex, dataSourceIndex, rowType, rowState);
130                 }
131
132                 public string doGetCallbackResult ()
133                 {
134                         return base.GetCallbackResult ();
135                 }
136
137                 public string doGetCallbackScript (IButtonControl buttonControl, string argument)
138                 {
139                         return base.GetCallbackScript (buttonControl, argument);
140                 }
141
142                 protected override void InitializePager (GridViewRow row, int columnSpan, PagedDataSource pagedDataSource)
143                 {
144                         base.InitializePager (row, columnSpan, pagedDataSource);
145                         ifPagerInitilized = true;
146                 }
147
148                 protected override void InitializeRow (GridViewRow row, DataControlField[] fields)
149                 {
150                         base.InitializeRow (row, fields);
151                 }
152
153                 public bool DoOnBubbleEvent (object source, EventArgs e)
154                 {
155                         return base.OnBubbleEvent (source, e);
156                 }
157
158                 public void DoOnDataBinding (EventArgs e)
159                 {
160                         base.OnDataBinding (e);
161                 }
162
163                 public void DoOnDataBound (EventArgs e)
164                 {
165                         base.OnDataBound (e);
166                 }
167
168                 protected override void OnDataPropertyChanged ()
169                 {
170                         base.OnDataPropertyChanged ();
171                         dataPropertyChanged = true;
172                 }
173
174                 public void DoOnDataSourceViewChanged (object sender, EventArgs e)
175                 {
176                         base.OnDataSourceViewChanged (sender, e);
177                 }
178
179                 public void DoOnInit (EventArgs e)
180                 {
181                         base.OnInit (e);
182                 }
183
184                 public void DoOnLoad (EventArgs e)
185                 {
186                         base.OnLoad (e);
187                 }
188
189                 public void DoOnPageIndexChanged (EventArgs e)
190                 {
191                         base.OnPageIndexChanged (e);
192                 }
193
194                 public void DoOnPageIndexChanging (GridViewPageEventArgs e)
195                 {
196                         base.OnPageIndexChanging (e);
197                 }
198
199                 protected override void OnPagePreLoad (object sender, EventArgs e)
200                 {
201                         base.OnPagePreLoad (sender, e);
202                         pagePreLoad = true;
203                 }
204
205                 public void DoOnPreRender (EventArgs e)
206                 {
207                         base.OnPreRender (e);
208                 }
209
210                 public void DoOnRowCancelingEdit (GridViewCancelEditEventArgs e)
211                 {
212                         base.OnRowCancelingEdit (e);
213                 }
214
215                 public void DoOnRowCommand (GridViewCommandEventArgs e)
216                 {
217                         base.OnRowCommand (e);
218                 }
219
220                 public void DoOnRowCreated (GridViewRowEventArgs e)
221                 {
222                         base.OnRowCreated (e);
223                 }
224
225                 public void DoOnRowDataBound (GridViewRowEventArgs e)
226                 {
227                         base.OnRowDataBound (e);
228                 }
229
230                 public void DoOnRowDeleted (GridViewDeletedEventArgs e)
231                 {
232                         base.OnRowDeleted (e);
233                 }
234
235                 public void DoOnRowDeleting (GridViewDeleteEventArgs e)
236                 {
237                         base.OnRowDeleting (e);
238                 }
239
240                 public void DoOnRowEditing (GridViewEditEventArgs e)
241                 {
242                         base.OnRowEditing (e);
243                 }
244
245                 public void DoOnRowUpdated (GridViewUpdatedEventArgs e)
246                 {
247                         base.OnRowUpdated (e);
248                 }
249
250                 public void DoOnRowUpdating (GridViewUpdateEventArgs e)
251                 {
252                         base.OnRowUpdating (e);
253                 }
254
255                 public void DoOnSelectedIndexChanged (EventArgs e)
256                 {
257                         base.OnSelectedIndexChanged (e);
258                 }
259
260                 public void DoOnSelectedIndexChanging (GridViewSelectEventArgs e)
261                 {
262                         base.OnSelectedIndexChanging (e);
263                 }
264
265                 public void DoOnSorted (EventArgs e)
266                 {
267                         base.OnSorted (e);
268                 }
269
270                 public void DoOnSorting (GridViewSortEventArgs e)
271                 {
272                         base.OnSorting (e);
273                 }
274
275                 public void DoOnUnload (EventArgs e)
276                 {
277                         base.OnUnload (e);
278                 }
279
280                 public void DoPerformDataBinding (IEnumerable data)
281                 {
282                         base.PerformDataBinding (data);
283                 }
284
285                 protected internal override void PrepareControlHierarchy ()
286                 {
287                         base.PrepareControlHierarchy ();
288                         controlHierarchy = true;
289                 }
290
291                 public object DoSaveControlState ()
292                 {
293                         return base.SaveControlState ();
294                 }
295
296                 public void DoLoadControlState (object savedState)
297                 {
298                         base.LoadControlState (savedState);
299                 }
300
301                 public void SetRequiresDataBinding (bool value)
302                 {
303                         RequiresDataBinding = value;
304                 }
305
306                 public bool GetRequiresDataBinding ()
307                 {
308                         return RequiresDataBinding;
309                 }
310         }
311
312         [Serializable]
313         [TestFixture]
314         public class GridViewTest
315         {
316                 class DS : ObjectDataSource, IDataSource
317                 {
318                         public static List<string> GetList ()
319                         {
320                                 List<string> list = new List<string> ();
321                                 list.Add ("Norway");
322                                 list.Add ("Sweden");
323                                 list.Add ("France");
324                                 list.Add ("Italy");
325                                 list.Add ("Israel");
326                                 list.Add ("Russia");
327                                 return list;
328                         }
329
330                         public void DoRaiseDataSourceChangedEvent (EventArgs e)
331                         {
332                                 RaiseDataSourceChangedEvent (e);
333                         }
334                 }
335
336                 public class DataSourceObject
337                 {
338                         public static List<string> GetList (string sortExpression, int startRowIndex, int maximumRows)
339                         {
340                                 return GetList ();
341                         }
342
343                         public static List<string> GetList (int startRowIndex, int maximumRows)
344                         {
345                                 return GetList ();
346                         }
347
348                         public static List<string> GetList (string sortExpression)
349                         {
350                                 return GetList ();
351                         }
352
353                         public static List<string> GetList ()
354                         {
355                                 List<string> list = new List<string> ();
356                                 list.Add ("Norway");
357                                 list.Add ("Sweden");
358                                 list.Add ("France");
359                                 list.Add ("Italy");
360                                 list.Add ("Israel");
361                                 list.Add ("Russia");
362                                 return list;
363                         }
364
365                         public static int GetCount ()
366                         {
367                                 return GetList ().Count;
368                         }
369                 }
370                 
371                 public class data
372                 {
373                         private static ArrayList _data = new ArrayList ();
374
375                         static data ()
376                         {
377                                 _data.Add (new DataItem (1, "heh1"));
378                                 _data.Add (new DataItem (2, "heh2"));
379                         }
380
381                         public data ()
382                         {
383                         }
384
385                         public ArrayList GetAllItems ()
386                         {
387                                 return _data;
388                         }
389
390                         public void UpdateItem (int id, string name)
391                         {
392                                 foreach (DataItem i in _data) {
393                                         if (i.ID == id) {
394                                                 i.Name = name;
395                                                 return;
396                                         }
397                                 }
398                         }
399                 }
400
401                 public class DataItem
402                 {
403                         int _id = 0;
404                         string _name = "";
405
406                         public DataItem (int id, string name)
407                         {
408                                 _id = id;
409                                 _name = name;
410                         }
411
412                         public int ID {
413                                 get { return _id; }
414                         }
415
416                         public string Name {
417                                 get { return _name; }
418                                 set { _name = value; }
419                         }
420                 }
421
422                 public const string BOOLFIELD = "bool";
423                 public const string STRINGFIELD = "str";
424                 ArrayList myds = new ArrayList ();
425                 public bool InitilizePager;
426
427                 [TestFixtureSetUp]
428                 public void GridViewInit ()
429                 {
430
431                         myds.Add ("Norway");
432                         myds.Add ("Sweden");
433                         myds.Add ("France");
434                         myds.Add ("Italy");
435                         myds.Add ("Israel");
436                         myds.Add ("Russia");
437
438                         WebTest.CopyResource (GetType (), "GridViewUpdate.aspx", "GridViewUpdate.aspx");
439                         WebTest.CopyResource (GetType (), "NoEventValidation.aspx", "NoEventValidation.aspx");
440                         WebTest.CopyResource (GetType (), "TableSections_Bug551666.aspx", "TableSections_Bug551666.aspx");
441                         WebTest.CopyResource (GetType (), "TableSections_Bug551666.aspx.cs", "TableSections_Bug551666.aspx.cs");
442                         WebTest.CopyResource (GetType (), "GridView_Bug595567.aspx", "GridView_Bug595567.aspx");
443                 }
444
445                 [Test (Description="Bug 595567")]
446                 public void HeaderFooterVisibility_Bug595567 ()
447                 {
448                         WebTest t = new WebTest ("GridView_Bug595567.aspx");
449                         string originalHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"gridView\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">Item</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>0</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>0</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>0</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
450                         string pageHtml = t.Run ();
451                         string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml);
452
453                         HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "#A1");
454                 }
455                 
456                 [Test]
457                 public void GridView_DefaultProperties ()
458                 {
459                         PokerGridView g = new PokerGridView ();
460                         Assert.AreEqual (0, g.StateBag.Count, "ViewState.Count");
461                         Assert.AreEqual (false, g.AllowPaging, "AllowPaging");
462                         Assert.AreEqual (false, g.AllowSorting, "AllowSorting");
463                         // The AlternatingRowStyle property is tested by the TableItemStyle test (already exists)
464                         Assert.AreEqual (true, g.AutoGenerateColumns, "AutoGenerateColumns");
465                         Assert.AreEqual (false, g.AutoGenerateDeleteButton, "AutoGenerateDeleteButton");
466                         Assert.AreEqual (false, g.AutoGenerateEditButton, "AutoGenerateEditButton");
467                         Assert.AreEqual (false, g.AutoGenerateSelectButton, "AutoGenerateSelectButton");
468                         Assert.AreEqual ("", g.BackImageUrl, "BackImageUrl");
469                         Assert.AreEqual (null, g.BottomPagerRow, "BottomPagerRow");
470                         Assert.AreEqual ("", g.Caption, "Caption");
471                         Assert.AreEqual (TableCaptionAlign.NotSet, g.CaptionAlign, "CaptionAlign");
472                         Assert.AreEqual (-1, g.CellPadding, "CellPadding");
473                         Assert.AreEqual (0, g.CellSpacing, "CellSpacing");
474                         // ToDo: The Columns property default value is tested by the DataControlFieldCollection and DataControlField tests
475                         Assert.AreEqual (0, g.DataKeyNames.Length, "DataKeyNames");
476                         // ToDo: The DataKeys property default value is tested by the DataKeyArray and DataKey tests
477                         Assert.AreEqual (-1, g.EditIndex, "EditIndex");
478                         // The EditRowStyle property is tested by the TableItemStyle test (already exists)
479                         // The EmptyDataRowStyle property is tested by the TableItemStyle test (already exists)
480                         Assert.AreEqual (null, g.EmptyDataTemplate, "EmptyDataTemplate");
481                         Assert.AreEqual ("", g.EmptyDataText, "EmptyDataText");
482                         Assert.AreEqual (false, g.EnableSortingAndPagingCallbacks, "EnableSortingAndPagingCallbacks");
483                         
484                         // The FooterStyle property is tested by the TableItemStyle test (already exists)
485                         Assert.AreEqual (GridLines.Both, g.GridLines, "GridLines");
486                         // The HeaderStyle property is tested by the TableItemStyle test (already exists)
487                         Assert.AreEqual (HorizontalAlign.NotSet, g.HorizontalAlign, "HorizontalAlign");
488                         
489                         Assert.AreEqual (0, g.PageIndex, "PageIndex");
490                         // ToDo: The PagerSettings property is tested by the PagerSettings test
491                         // The PagerStyle property is tested by the TableItemStyle test (already exists)
492                         Assert.AreEqual (null, g.PagerTemplate, "PagerTemplate");
493                         Assert.AreEqual (10, g.PageSize, "PageSize");
494                         Assert.AreEqual ("", g.RowHeaderColumn, "RowHeaderColumn");
495                         // ToDo: The Rows property is tested by the GridViewRowCollection and GridViewRow test
496                         // The RowStyle property is tested by the TableItemStyle test (already exists)
497                         Assert.AreEqual (false, g.ShowFooter, "ShowFooter");
498                         Assert.AreEqual (true, g.ShowHeader, "ShowHeader");
499                         Assert.AreEqual (SortDirection.Ascending, g.SortDirection, "SortDirection");
500                         Assert.AreEqual (null, g.TopPagerRow, "TopPagerRow");
501                         Assert.AreEqual (true, g.UseAccessibleHeader, "UseAccessibleHeader");
502                 }
503
504                 [Test]
505                 public void GridView_DefaultPropertiesNotWorking ()
506                 {
507                         PokerGridView g = new PokerGridView ();
508                         Assert.AreEqual (null, g.FooterRow, "FooterRow");
509                         Assert.AreEqual (null, g.HeaderRow, "HeaderRow");
510                         Assert.AreEqual (true, g.Visible, "ViewVisible");
511                         Assert.AreEqual (0, g.PageCount, "PageCount");
512                         Assert.AreEqual ("", g.SortExpression, "SortExpression");
513                 }
514
515                 [Test]
516                 public void GridView_AssignedProperties ()
517                 {
518                         PokerGridView g = new PokerGridView ();
519                         Assert.AreEqual (0, g.StateBag.Count, "ViewState.Count");
520                         g.AllowPaging = true;
521                         Assert.AreEqual (true, g.AllowPaging, "AllowPaging");
522                         g.AllowSorting = true;
523                         Assert.AreEqual (true, g.AllowSorting, "AllowSorting");
524                         g.AutoGenerateColumns = false;
525                         Assert.AreEqual (false, g.AutoGenerateColumns, "AutoGenerateColumns");
526                         g.AutoGenerateDeleteButton = true;
527                         Assert.AreEqual (true, g.AutoGenerateDeleteButton, "AutoGenerateDeleteButton");
528                         g.AutoGenerateEditButton = true;
529                         Assert.AreEqual (true, g.AutoGenerateEditButton, "AutoGenerateEditButton");
530                         g.AutoGenerateSelectButton = true;
531                         Assert.AreEqual (true, g.AutoGenerateSelectButton, "AutoGenerateSelectButton");
532                         g.BackImageUrl = "test";
533                         Assert.AreEqual ("test", g.BackImageUrl, "BackImageUrl");
534                         g.Caption = "test";
535                         Assert.AreEqual ("test", g.Caption, "Caption");
536                         g.CaptionAlign = TableCaptionAlign.Left;
537                         Assert.AreEqual (TableCaptionAlign.Left, g.CaptionAlign, "CaptionAlign");
538                         g.CellPadding = 0;
539                         Assert.AreEqual (0, g.CellPadding, "CellPadding");
540                         g.CellSpacing = 1;
541                         Assert.AreEqual (1, g.CellSpacing, "CellSpacing");
542                         // ToDo: The Columns property default value is tested by the DataControlFieldCollection and DataControlField tests
543                         string[] str = new String[1];
544                         str[0] = "test";
545                         g.DataKeyNames = str;
546                         Assert.AreEqual ("test", g.DataKeyNames[0], "DataKeyNames");
547                         
548                         // ToDo: The DataKeys property default value is tested by the DataKeyArray and DataKey tests
549                         g.EditIndex = 0;
550                         Assert.AreEqual (0, g.EditIndex, "EditIndex");
551                         // The EditRowStyle property default value is tested by the TableItemStyle test (already exists)
552                         // The EmptyDataRowStyle property default value is tested by the TableItemStyle test (already exists)
553                         
554                         MyWebControl.Image myImage = new MyWebControl.Image ();
555                         myImage.ImageUrl = "myimage.jpg";
556                         ImageTemplate template = new ImageTemplate ();
557                         template.MyImage = myImage;
558                         // end create template image
559
560                         g.EmptyDataTemplate = template;
561                         Assert.IsNotNull (g.EmptyDataTemplate, "EmptyDataTemplate");
562                         g.EmptyDataText = "test";
563                         Assert.AreEqual ("test", g.EmptyDataText, "EmptyDataText");
564
565                         g.EnableSortingAndPagingCallbacks = true;
566                         Assert.AreEqual (true, g.EnableSortingAndPagingCallbacks, "EnableSortingAndPagingCallbacks");
567
568                         // The FooterStyle property default value is tested by the TableItemStyle test (already exists)
569                         g.GridLines = GridLines.Horizontal;
570                         Assert.AreEqual (GridLines.Horizontal, g.GridLines, "GridLines");
571
572                         g.HorizontalAlign = HorizontalAlign.Justify;
573                         Assert.AreEqual (HorizontalAlign.Justify, g.HorizontalAlign, "HorizontalAlign");
574
575                         g.PageIndex = 1;
576                         Assert.AreEqual (1, g.PageIndex, "PageIndex");
577                         // ToDo: The PagerSettings property default value is tested by the PagerSettings test
578                         // The PagerStyle property default value is tested by the TableItemStyle test (already exists)
579                         g.PagerTemplate = template;
580                         Assert.IsNotNull (g.PagerTemplate, "PagerTemplate");
581                         g.PageSize = 5;
582                         Assert.AreEqual (5, g.PageSize, "PageSize");
583                         g.RowHeaderColumn = "test";
584                         Assert.AreEqual ("test", g.RowHeaderColumn, "RowHeaderColumn");
585                         // ToDo: The Rows property default value is tested by the GridViewRowCollection and GridViewRow test                    
586                         // The RowStyle property default value is tested by the TableItemStyle test (already exists)
587                         g.ShowFooter = true;
588                         Assert.AreEqual (true, g.ShowFooter, "ShowFooter");
589                         g.ShowHeader = false;
590                         Assert.AreEqual (false, g.ShowHeader, "ShowHeader");
591                         g.UseAccessibleHeader = false;
592                         Assert.AreEqual (false, g.UseAccessibleHeader, "UseAccessibleHeader");
593                 }
594 #if NET_4_0
595                 [Test]
596                 public void SortedAscendingCellStyle ()
597                 {
598                         var g = new PokerGridView ();
599
600                         Assert.IsNotNull (g.SortedAscendingCellStyle, "#A1-1");
601                 }
602
603                 [Test]
604                 public void SortedAscendingHeaderStyle ()
605                 {
606                         var g = new PokerGridView ();
607
608                         Assert.IsNotNull (g.SortedAscendingHeaderStyle, "#A1-1");
609                 }
610
611                 [Test]
612                 public void SortedDescendingCellStyle ()
613                 {
614                         var g = new PokerGridView ();
615
616                         Assert.IsNotNull (g.SortedDescendingCellStyle, "#A1-1");
617                 }
618
619                 [Test]
620                 public void SortedDescendingHeaderStyle ()
621                 {
622                         var g = new PokerGridView ();
623
624                         Assert.IsNotNull (g.SortedDescendingHeaderStyle, "#A1-1");
625                 }
626 #endif
627                 [Test]
628                 public void GridView_DefaultProtectedProperties ()
629                 {
630                         PokerGridView g = new PokerGridView ();
631                         Assert.AreEqual (HtmlTextWriterTag.Table, g.PTagKey, "TagKey");
632                 }
633
634                 [Test]
635                 public void GridView_Sort_and_DataSourceSelectArguments ()
636                 {
637                         DataSourceView view;
638                         DataSourceSelectArguments arg;
639                         Page p = new Page ();
640
641                         PokerGridView g = new PokerGridView ();
642                         g.Columns.Add (new BoundField ());
643                         g.AllowSorting = true;
644                         p.Controls.Add (g);
645
646                         ObjectDataSource data = new ObjectDataSource ();
647                         data.TypeName = typeof (DataSourceObject).AssemblyQualifiedName;
648                         data.SelectMethod = "GetList";
649                         data.SortParameterName = "sortExpression";
650                         data.ID = "Data";
651                         p.Controls.Add (data);
652
653                         g.DataSourceID = "Data";
654                         g.EditIndex = 2;
655                         g.PageIndex = 1;
656                         g.DataBind ();
657                         
658                         g.Sort ("sort", SortDirection.Descending);
659
660                         Assert.AreEqual (-1, g.EditIndex, "EditIndex after Sort, Bound by DataSourceID");
661                         Assert.AreEqual (0, g.PageIndex, "PageIndex after Sort, Bound by DataSourceID");
662
663                         arg = g.DoCreateDataSourceSelectArguments();
664                         view = g.DoGetData ();
665                         Assert.IsTrue (view.CanSort);
666                         Assert.AreEqual ("sort", g.SortExpression, "SortExpression, Bound by DataSourceID");
667                         Assert.AreEqual (SortDirection.Descending, g.SortDirection, "SortDirection, Bound by DataSourceID");
668                         Assert.AreEqual ("sort DESC", arg.SortExpression, "AllowSorting = true, Bound by DataSourceID");
669
670                         g.AllowSorting = false;
671                         arg = g.DoCreateDataSourceSelectArguments ();
672                         Assert.AreEqual ("sort DESC", arg.SortExpression, "AllowSorting = false, Bound by DataSourceID");
673                 }
674
675                 [Test]
676                 public void GridView_PageCount ()
677                 {
678                         Page p = new Page ();
679
680                         PokerGridView gv = new PokerGridView ();
681                         gv.PageSize = 3;
682                         gv.AllowPaging = true;
683                         p.Controls.Add (gv);
684
685                         ObjectDataSource data = new ObjectDataSource ();
686                         data.ID = "ObjectDataSource1";
687                         data.TypeName = typeof (DataSourceObject).AssemblyQualifiedName;
688                         data.SelectMethod = "GetList";
689                         p.Controls.Add (data);
690
691                         gv.DataSourceID = "ObjectDataSource1";
692                         gv.SetRequiresDataBinding (true);
693
694                         Assert.AreEqual (0, gv.PageCount, "PageCount before binding");
695
696                         gv.DataBind ();
697
698                         Assert.AreEqual (2, gv.PageCount, "PageCount after binding");
699
700                         PokerGridView copy = new PokerGridView ();
701                         copy.DoLoadControlState (gv.DoSaveControlState ());
702
703                         Assert.AreEqual (2, copy.PageCount, "PageCount from ViewState");
704                 }
705
706                 [Test]
707                 public void GridView_DataKeys ()
708                 {
709                         Page p = new Page ();
710
711                         PokerGridView gv = new PokerGridView ();
712                         p.Controls.Add (gv);
713
714                         ObjectDataSource data = new ObjectDataSource ();
715                         data.TypeName = typeof (DataObject).AssemblyQualifiedName;
716                         data.SelectMethod = "Select";
717                         p.Controls.Add (data);
718
719                         gv.DataSource = data;
720                         gv.DataKeyNames = new string [] { "ID", "FName" };
721
722                         DataKeyArray keys1 = gv.DataKeys;
723
724                         Assert.AreEqual (0, keys1.Count, "DataKeys count before binding");
725
726                         gv.DataBind ();
727
728                         DataKeyArray keys2 = gv.DataKeys;
729                         DataKeyArray keys3 = gv.DataKeys;
730
731                         Assert.IsFalse (Object.ReferenceEquals (keys1, keys2), "DataKey returns the same instans");
732                         Assert.IsTrue (Object.ReferenceEquals (keys2, keys3), "DataKey returns the same instans");
733
734                         Assert.AreEqual (1, keys1.Count, "DataKeys count after binding");
735                         Assert.AreEqual (1001, keys1 [0].Value, "DataKey.Value after binding");
736                         Assert.AreEqual (2, keys1 [0].Values.Count, "DataKey.Values count after binding");
737                         Assert.AreEqual (1001, keys1 [0].Values [0], "DataKey.Values[0] after binding");
738                         Assert.AreEqual ("Mahesh", keys1 [0].Values [1], "DataKey.Values[1] after binding");
739
740                         PokerGridView copy = new PokerGridView ();
741                         object state = gv.DoSaveControlState ();
742                         copy.DoLoadControlState (state);
743
744                         DataKeyArray keys4 = copy.DataKeys;
745
746                         Assert.AreEqual (1, keys4.Count, "DataKeys count from ControlState");
747                         Assert.AreEqual (1001, keys4 [0].Value, "DataKey.Value from ControlState");
748                         Assert.AreEqual (2, keys4 [0].Values.Count, "DataKey.Values count from ControlState");
749                         Assert.AreEqual (1001, keys4 [0].Values [0], "DataKey.Values[0] from ControlState");
750                         Assert.AreEqual ("Mahesh", keys4 [0].Values [1], "DataKey.Values[1] from ControlState");
751                 }
752
753                 // MSDN: The CreateDataSourceSelectArguments method is a helper method called by 
754                 // the GridView control to create the DataSourceSelectArguments object that 
755                 // contains the arguments passed to the data source. In this implementation, 
756                 // the DataSourceSelectArguments object contains the arguments for paging operations.
757                 [Test]
758                 public void GridView_CreateDataSourceSelectArguments ()
759                 {
760                         DataSourceView view;
761                         Page p = new Page ();
762
763                         PokerGridView g = new PokerGridView ();
764                         g.Sorting += new GridViewSortEventHandler (g_Sorting);
765                         p.Controls.Add (g);
766
767                         ObjectDataSource data = new ObjectDataSource ();
768                         data.TypeName = typeof (DataSourceObject).AssemblyQualifiedName;
769                         data.SelectMethod = "GetList";
770                         data.SortParameterName = "sortExpression";
771                         DataSourceSelectArguments arg;
772                         p.Controls.Add (data);
773
774                         g.DataSource = data;
775                         g.DataBind ();
776
777                         arg = g.DoCreateDataSourceSelectArguments ();
778                         Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "Default");
779
780                         g.AllowPaging = true;
781                         g.PageIndex = 2;
782                         g.PageSize = 3;
783                         arg = g.DoCreateDataSourceSelectArguments ();
784                         view = g.DoGetData ();
785                         Assert.IsFalse (view.CanPage);
786                         Assert.IsTrue (view.CanRetrieveTotalRowCount);
787                         Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = true, CanPage = false, CanRetrieveTotalRowCount = true");
788
789                         // make DataSourceView.CanPage = true
790                         data.EnablePaging = true;
791
792                         arg = g.DoCreateDataSourceSelectArguments ();
793                         view = g.DoGetData ();
794                         Assert.IsTrue (view.CanPage);
795                         Assert.IsFalse (view.CanRetrieveTotalRowCount);
796                         Assert.IsTrue (arg.Equals (new DataSourceSelectArguments (6, -1)), "AllowPaging = true, CanPage = true, CanRetrieveTotalRowCount = false");
797
798                         g.AllowPaging = false;
799                         arg = g.DoCreateDataSourceSelectArguments ();
800                         Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = false, CanPage = true, CanRetrieveTotalRowCount = false");
801
802                         // make DataSourceView.CanRetrieveTotalRowCount = true
803                         data.SelectCountMethod = "GetCount";
804
805                         arg = g.DoCreateDataSourceSelectArguments ();
806                         Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = false, CanPage = true, CanRetrieveTotalRowCount = true");
807
808                         g.AllowPaging = true;
809                         arg = g.DoCreateDataSourceSelectArguments ();
810                         DataSourceSelectArguments arg1 = new DataSourceSelectArguments (6, 3);
811                         arg1.RetrieveTotalRowCount = true;
812                         view = g.DoGetData ();
813                         Assert.IsTrue (view.CanPage);
814                         Assert.IsTrue (view.CanRetrieveTotalRowCount);
815                         Assert.IsTrue (arg.Equals (arg1), "AllowPaging = true, CanPage = true, CanRetrieveTotalRowCount = true");
816
817                         g.AllowPaging = false;
818                         g.AllowSorting = true;
819                         g.EditIndex = 2;
820                         g.PageIndex = 1;
821                         g.Sort ("sort", SortDirection.Descending);
822
823                         Assert.AreEqual (2, g.EditIndex, "EditIndex after Sort, Bound by DataSource");
824                         Assert.AreEqual (1, g.PageIndex, "PageIndex after Sort, Bound by DataSource");
825                         
826                         arg = g.DoCreateDataSourceSelectArguments ();
827                         view = g.DoGetData ();
828                         Assert.IsTrue (view.CanSort);
829                         Assert.AreEqual (String.Empty, g.SortExpression, "SortExpression, Bound by DataSource");
830                         Assert.AreEqual (SortDirection.Ascending, g.SortDirection, "SortDirection, Bound by DataSource");
831                         Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowSorting = true, Bound by DataSource");
832                 }
833
834                 static void g_Sorting (object sender, GridViewSortEventArgs e)
835                 {
836                         Assert.AreEqual ("sort", e.SortExpression, "GridViewSortEventArgs.SortExpression");
837                         Assert.AreEqual (SortDirection.Descending, e.SortDirection, "GridViewSortEventArgs.SortDirection");
838                 }
839
840                 [Test]
841                 public void GridView_DataBind()
842                 {
843                         PokerGridView g = new PokerGridView ();
844                         g.DataSource = myds;
845                         g.DataBind ();
846                         Assert.AreEqual (6, g.Rows.Count, "DataBind");
847
848                         g.DataSource = null;
849                         g.DataBind ();
850                         Assert.AreEqual (0, g.Rows.Count, "DataBind");
851                 }
852
853                 [Test]
854                 public void GridView_DataBind_NoDataSource ()
855                 {
856                         PokerGridView g = new PokerGridView ();
857                         g.DataBind ();
858                         Assert.AreEqual (0, g.Rows.Count, "GridView_DataBind_NoDataSource");
859                 }
860
861                 bool rowcreatedchecker;
862                 bool deleteitemchecker;
863                 bool sortingaction;
864
865                 [Test]
866                 public void GridView_DeleteItem ()
867                 {
868                         PokerGridView g = new PokerGridView ();
869                         ArrayList myds = new ArrayList ();
870                         myds.Add ("Norway");
871                         myds.Add ("Sweden");
872                         myds.Add ("France");
873                         myds.Add ("Italy");
874
875                         g.DataSource = myds;
876                         g.DataBind ();
877                         Assert.AreEqual (false, deleteitemchecker, "DeleteItem#1");
878                         g.RowDeleting += new GridViewDeleteEventHandler (RowDeletingHandler);
879                         g.DeleteRow (0);
880                         Assert.AreEqual (true, deleteitemchecker, "DeleteItem#2");
881                 }
882
883                 protected void RowDeletingHandler (object sender, GridViewDeleteEventArgs e)
884                 {
885                         deleteitemchecker = true;
886                 }
887
888                 [Test]
889                 public void GridView_RowCreated ()
890                 {
891                         GridView g = new GridView ();
892                         ButtonField field = new ButtonField ();
893                         field.ButtonType = ButtonType.Link;
894                         field.Text = "Click";
895                         field.CommandName = "CMD";
896                         g.Columns.Add (field);
897                         g.RowCreated += new GridViewRowEventHandler (RowCreatedHandler);
898
899                         Assert.AreEqual (false, rowcreatedchecker, "RowCreated#1");
900
901                         ArrayList myds = new ArrayList ();
902                         myds.Add ("Norway");
903                         myds.Add ("Sweden");
904                         myds.Add ("France");
905                         myds.Add ("Italy");
906
907                         g.DataSource = myds;
908                         g.DataBind ();
909                         Assert.AreEqual (true, rowcreatedchecker, "RowCreated#2");
910                 }
911
912                 protected void RowCreatedHandler (object sender, GridViewRowEventArgs e)
913                 {
914                         if (e.Row.Cells.Count > 0)
915                                 rowcreatedchecker = true;
916
917                         // Example from MSDN: GridView.RowCreated Event 
918  
919                         // The GridViewCommandEventArgs class does not contain a 
920                         // property that indicates which row's command button was
921                         // clicked. To identify which row's button was clicked, use 
922                         // the button's CommandArgument property by setting it to the 
923                         // row's index.
924                         if (e.Row.RowType == DataControlRowType.DataRow) {
925                                 // Retrieve the LinkButton control from the first column.
926                                 IButtonControl addButton = (IButtonControl) e.Row.Cells [0].Controls [0];
927
928                                 // Set the LinkButton's CommandArgument property with the
929                                 // row's index.
930                                 addButton.CommandArgument = e.Row.RowIndex.ToString ();
931                         }
932                 }
933                 
934                 [Test]
935                 public void GridView_Sort ()
936                 {
937                         PokerGridView g = new PokerGridView ();
938                         Assert.AreEqual (false, sortingaction, "BeforeSorting");
939                         g.Sorting += new GridViewSortEventHandler (Gridview_sorting);
940                         g.Sort("Item",SortDirection.Descending);
941                         Assert.AreEqual (true, sortingaction, "AfterSorting");
942                 }
943                 
944                 protected void Gridview_sorting (object sender, GridViewSortEventArgs e)
945                 {
946                         sortingaction = true;
947                 }
948
949                 [Test]
950                 public void GridView_IsBindableType ()
951                 {
952                         Type [] types = new Type [] {
953                                 typeof(Boolean), 
954                                 typeof(Byte),
955                                 typeof(Char),
956                                 typeof(DateTime),
957                                 typeof(Decimal),
958                                 typeof(Double),
959                                 typeof(Guid),
960                                 typeof(Int16),
961                                 typeof(Int32),
962                                 typeof(Int64),
963                                 typeof(SByte),
964                                 typeof(Single),
965                                 typeof(String),
966                                 typeof(UInt16),
967                                 typeof(UInt32),
968                                 typeof(UInt64)
969                                  };
970
971                         GridView g = new GridView ();
972                         foreach (Type type in types)
973                                 Assert.AreEqual (true, g.IsBindableType (type), type.ToString ());
974
975                         Assert.AreEqual (false, g.IsBindableType (typeof (Enum)), "test");
976                         Assert.AreEqual (false, g.IsBindableType (typeof (Object)), "test");
977                 }
978
979                 [Test]
980                 public void GridView_CreateAutoGeneratedColumn ()
981                 {
982                         PokerGridView g = new PokerGridView ();
983                         AutoGeneratedFieldProperties fp = new AutoGeneratedFieldProperties();
984                         fp.Name = "testfield";
985                         fp.Type = typeof (string);
986                         AutoGeneratedField gf = g.DoCreateAutoGeneratedColumn (fp);
987                         Assert.AreEqual (typeof (string), gf.DataType , "AutoGeneratedColumn#1");
988                         Assert.AreEqual ("testfield", gf.HeaderText, "AutoGeneratedColumn#2");
989                         Assert.AreEqual ("System.Web.UI.WebControls.AutoGeneratedField", gf.GetType ().ToString (), "AutoGeneratedColumn#3");
990                 }
991
992                 [Test]
993                 public void GridView_CreateChildControls ()
994                 {
995                         PokerGridView g = new PokerGridView ();
996                         g.Page = new Page ();
997                         g.DataSource = myds;
998                         g.DataBind ();
999                         Assert.AreEqual(6,g.DoCreateChildControls(myds,true),"CreateChildControls#1");
1000
1001                         g.AllowPaging = true;
1002                         g.PageSize = 3;
1003                         g.DataBind ();
1004                         Assert.AreEqual (6, g.DoCreateChildControls (myds, true), "CreateChildControls#1");
1005                 }
1006
1007                 class MyEnumSource : IEnumerable
1008                 {
1009                         int _count;
1010
1011                         public MyEnumSource (int count)
1012                         {
1013                                 _count = count;
1014                         }
1015
1016                         #region IEnumerable Members
1017
1018                         public IEnumerator GetEnumerator ()
1019                         {
1020                                 for (int i = 0; i < _count; i++)
1021                                         yield return i;
1022                         }
1023
1024                         #endregion
1025                 }
1026
1027                 [Test]
1028                 public void GridView_CreateChildControls_2 ()
1029                 {
1030                         PokerGridView g = new PokerGridView ();
1031                         g.AutoGenerateColumns = false;
1032                         g.AutoGenerateSelectButton = true;
1033                         g.EmptyDataText = "empty";
1034                         g.Page = new Page ();
1035                         g.DataSource = new MyEnumSource (20);
1036                         //g.DataBind ();
1037                         //Assert.AreEqual (20, g.DoCreateChildControls (new MyEnumSource (20), true), "CreateChildControls#1");
1038                         Assert.AreEqual (0, g.DoCreateChildControls (new MyEnumSource (0), true), "CreateChildControls#2");
1039                 }
1040
1041                 [Test]
1042                 public void GridView_CreateChildControls_1 ()
1043                 {
1044                         PokerGridView g = new PokerGridView ();
1045                         g.AutoGenerateSelectButton = true;
1046                         g.EmptyDataText = "empty";
1047                         Assert.AreEqual (0, g.DoCreateChildControls (new object [0], false), "CreateChildControls#2");
1048                         Assert.AreEqual (-1, g.DoCreateChildControls (new object [5], false), "CreateChildControls#3");
1049                 }
1050
1051                 [Test]
1052                 public void GridView_NullDS ()
1053                 {
1054                         PokerGridView g = new PokerGridView ();
1055                         g.DataSource = null;
1056                         g.DataBind ();
1057                         Assert.AreEqual (0, g.Rows.Count, "NullDS");
1058                 }
1059
1060                 [Test]
1061                 public void GridView_CreateChildTable ()
1062                 {
1063                         PokerGridView g = new PokerGridView ();
1064                         g.ID = "PokerGridView";
1065                         g.Caption = "Caption";
1066                         g.CaptionAlign = TableCaptionAlign.Right;
1067                         g.CellPadding = 2;
1068                         g.CellSpacing = 2;
1069                         Table t = g.DoCreateChildTable ();
1070                         Assert.IsNotNull (t, "CreateChildTable#1");
1071                         Assert.AreEqual (false, t.ControlStyleCreated, "CreateChildTable#2");
1072                 }
1073
1074                 [Test]
1075                 public void GridView_CreateControlStyle ()
1076                 {
1077                         PokerGridView g = new PokerGridView ();
1078                         g.BorderColor = Color.Red;
1079                         g.BorderStyle = BorderStyle.Dashed;
1080                         Style s = g.DoCreateControlStyle ();
1081                         Assert.AreEqual (typeof(TableStyle), s.GetType(), "CreateControlStyle#1");
1082                         Assert.AreEqual (((TableStyle) s).GridLines, GridLines.Both, "CreateControlStyle#2");
1083                         Assert.AreEqual (((TableStyle) s).CellSpacing, 0, "CreateControlStyle#3");
1084                 }
1085
1086                 [Test]
1087                 public void GridView_CreateRow ()
1088                 {
1089                         PokerGridView g = new PokerGridView ();
1090                         GridViewRow gr = g.doCreateRow(0, 0, DataControlRowType.Pager, DataControlRowState.Normal);
1091                         Assert.AreEqual (0, gr.RowIndex, "CreateRow#1");
1092                         Assert.AreEqual (0, gr.DataItemIndex, "CreateRow#2");
1093                         Assert.AreEqual (DataControlRowType.Pager, gr.RowType, "CreateRow#3");
1094                         Assert.AreEqual (DataControlRowState.Normal, gr.RowState, "CreateRow#4");
1095                 }
1096
1097                 [Test]
1098                 public void GridView_GetCallbackResult()
1099                 {
1100                         Page page = new Page ();
1101                         PokerGridView g = new PokerGridView ();
1102                         page.Controls.Add (g);
1103                         string s = g.doGetCallbackResult ();
1104                         if (s == null || s == string.Empty)
1105                                 Assert.Fail ("GetCallbackResult");
1106                 }
1107
1108                 [Test]
1109                 public void GridView_InitializePager ()
1110                 {
1111                         PokerGridView gv = new PokerGridView ();
1112                         Page page = new Page ();
1113                         page.Controls.Add (gv);
1114                         gv.AllowPaging = true;
1115                         gv.PageSize = 2;
1116                         gv.DataSource = myds;
1117                         Assert.AreEqual (false, gv.ifPagerInitilized, "BeforeInitializePagerRunned");
1118                         Assert.AreEqual (0, gv.PageCount, "BeforeInitializePagerPageCount");
1119                         gv.DataBind ();
1120                         Assert.AreEqual (true, gv.ifPagerInitilized, "AfterInitializePagerRunned");
1121                         Assert.AreEqual (3, gv.PageCount, "AfterInitializePagerPageCount");
1122                 }
1123
1124                 [Test]
1125                 public void GridView_InitializeRow ()
1126                 {
1127                         // not implemented yet
1128                 }
1129
1130                 [Test]
1131                 public void GridView_ViewState ()
1132                 {
1133                         PokerGridView gv = new PokerGridView ();
1134                         PokerGridView copy = new PokerGridView ();
1135                         gv.AllowPaging = true;
1136                         gv.AllowSorting = true;
1137                         gv.BackColor = Color.Red;
1138                         object state = gv.SaveState ();
1139                         copy.LoadState (state);
1140                         Assert.AreEqual (true, copy.AllowPaging, "ViewStateAllowPaging");
1141                         Assert.AreEqual (true, copy.AllowSorting, "ViewStateAllowSorting");
1142                         Assert.AreEqual (Color.Red, copy.BackColor, "ViewStateBackColor");
1143                 }
1144
1145                 // Private variables for bubble events
1146                 private bool bubbledeleterow;
1147                 private bool bubbleupdaterow;
1148                 private bool bubbleeditingrow;
1149                 private bool bubblesortint;
1150                 private bool bubblecanceling;
1151                 private bool bubbleselect;
1152                 private bool bubblepage;
1153                 private int newPageIndex;
1154
1155                 [Test]
1156                 public void GridView_BubbleEvent ()
1157                 {
1158                         PokerGridView gv = new PokerGridView ();
1159                         Page page = new Page ();
1160                         LinkButton lb = new LinkButton ();
1161                         gv.AllowPaging = true;
1162                         page.Controls.Add (gv);
1163                         gv.DataSource = myds;
1164                         gv.DataBind ();
1165                         gv.EditIndex = 0;
1166                         // 
1167                         gv.RowDeleting += new GridViewDeleteEventHandler (gv_RowDeleting);
1168                         gv.RowUpdating += new GridViewUpdateEventHandler (gv_RowUpdating);
1169                         gv.RowEditing += new GridViewEditEventHandler (gv_RowEditing);
1170                         gv.Sorting += new GridViewSortEventHandler (gv_Sorting);
1171                         gv.RowCancelingEdit += new GridViewCancelEditEventHandler (gv_RowCancelingEdit);
1172                         gv.SelectedIndexChanging+=new GridViewSelectEventHandler(gv_SelectedIndexChanging);
1173                         gv.PageIndexChanging+=new GridViewPageEventHandler(gv_PageIndexChanging);
1174                         // Delete
1175                         GridViewCommandEventArgs com1 = new GridViewCommandEventArgs (lb, new CommandEventArgs ("Delete", "0"));
1176                         Assert.AreEqual (false, bubbledeleterow, "BeforeBubbleEventDeleteRow");
1177                         gv.DoOnBubbleEvent (gv, com1);
1178                         Assert.AreEqual (true, bubbledeleterow, "AfterBubbleEventDeleteRow");
1179                         // Update
1180                         GridViewCommandEventArgs com2 = new GridViewCommandEventArgs (lb, new CommandEventArgs ("Update", "0"));
1181                         Assert.AreEqual (false, bubbleupdaterow, "BeforeBubbleEventUpdateRow");
1182                         gv.DoOnBubbleEvent (gv, com2);
1183                         Assert.AreEqual (true, bubbleupdaterow, "AfterBubbleEventUpdateRow");
1184                         // Edit
1185                         GridViewCommandEventArgs com3 = new GridViewCommandEventArgs (lb, new CommandEventArgs ("Edit", "0"));
1186                         Assert.AreEqual (false, bubbleeditingrow, "BeforeBubbleEventEditingRow");
1187                         gv.DoOnBubbleEvent (gv, com3);
1188                         Assert.AreEqual (true, bubbleeditingrow, "AfterBubbleEventEditingRow");
1189                         // Sort
1190                         gv.AllowSorting = true;
1191                         GridViewCommandEventArgs com4 = new GridViewCommandEventArgs (lb, new CommandEventArgs ("Sort", null));
1192                         Assert.AreEqual (false, bubblesortint, "BeforeBubbleEventSortingRow");
1193                         gv.DoOnBubbleEvent (gv, com4);
1194                         Assert.AreEqual (true, bubblesortint, "AfterBubbleEventSortingRow");
1195                         // Canceling Edit
1196                         GridViewCommandEventArgs com5 = new GridViewCommandEventArgs (lb, new CommandEventArgs ("Cancel", null));
1197                         Assert.AreEqual (false, bubblecanceling, "BeforeBubbleEventcancelingEdit");
1198                         gv.DoOnBubbleEvent (gv, com5);
1199                         Assert.AreEqual (true, bubblecanceling, "AfterBubbleEventcancelingEdit");
1200                         // Select
1201                         GridViewCommandEventArgs com6 = new GridViewCommandEventArgs (gv.SelectedRow, lb, new CommandEventArgs ("Select", "2"));
1202                         Assert.AreEqual (false, bubbleselect, "BeforeBubbleEventSelect");
1203                         gv.DoOnBubbleEvent (gv, com6);
1204                         Assert.AreEqual (true, bubbleselect, "AfterBubbleEventSelect");
1205                         //Next Page
1206                         GridViewCommandEventArgs com7 = new GridViewCommandEventArgs (lb, new CommandEventArgs ("Page", "Next"));
1207                         Assert.AreEqual (false, bubblepage, "BeforeBubbleEventNextPage");
1208                         gv.DoOnBubbleEvent (gv, com7);
1209                         Assert.AreEqual (true, bubblepage, "AfterBubbleEventNextPage");
1210                         Assert.AreEqual (1, newPageIndex, "NextPage");
1211                         // Prev Page
1212                         ResetEvents ();
1213                         GridViewCommandEventArgs com8 = new GridViewCommandEventArgs (lb, new CommandEventArgs ("Page", "Prev"));
1214                         Assert.AreEqual (false, bubblepage, "BeforeBubbleEventPrevPage");
1215                         gv.DoOnBubbleEvent (gv, com8);
1216                         Assert.AreEqual (true, bubblepage, "AfterBubbleEventPrevPage");
1217                         Assert.AreEqual (-1, newPageIndex, "PrevPage");
1218                         ResetEvents ();
1219                         GridViewCommandEventArgs com9 = new GridViewCommandEventArgs (lb, new CommandEventArgs ("Page", "Last"));
1220                         Assert.AreEqual (false, bubblepage, "BeforeBubbleEventLastPage");
1221                         gv.DoOnBubbleEvent (gv, com9);
1222                         Assert.AreEqual (true, bubblepage, "AfterBubbleEventLastPage");
1223                         ResetEvents ();
1224                         GridViewCommandEventArgs com10 = new GridViewCommandEventArgs (lb, new CommandEventArgs ("Page", "First"));
1225                         Assert.AreEqual (false, bubblepage, "BeforeBubbleEventFirstPage");
1226                         gv.DoOnBubbleEvent (gv, com10);
1227                         Assert.AreEqual (true, bubblepage, "AfterBubbleEventFirstPage");
1228                         Assert.AreEqual (0, newPageIndex, "FirstPage");
1229                 }       
1230
1231                 private void gv_RowDeleting (object sender, EventArgs e)
1232                 {
1233                         bubbledeleterow = true;
1234                         rowDeleting = true;
1235                 }
1236
1237                 private void gv_RowUpdating (object sender, EventArgs e)
1238                 {
1239                         bubbleupdaterow = true;
1240                         rowUpdating = true;
1241                 }
1242
1243                 private void gv_RowEditing (object sender, EventArgs e)
1244                 {
1245                         bubbleeditingrow = true;
1246                         rowEditing = true;
1247                 }
1248
1249                 private void gv_Sorting (object sender, EventArgs e)
1250                 {
1251                         bubblesortint = true;
1252                         sorting = true;
1253                 }
1254
1255                 private void gv_RowCancelingEdit (object sender, EventArgs e)
1256                 {
1257                         bubblecanceling = true;
1258                         gridViewCancelEdit = true;
1259                 }
1260
1261                 private void gv_SelectedIndexChanging (object sender, GridViewSelectEventArgs e)
1262                 {
1263                         bubbleselect = true;
1264                         selectIndexChanging = true;
1265                         Assert.AreEqual (2, e.NewSelectedIndex, "SelectedIndexChanging");
1266                 }
1267
1268                 private void gv_PageIndexChanging (object sender, GridViewPageEventArgs e)
1269                 {
1270                         bubblepage = true;
1271                         pageIndexChanging = true;
1272                         newPageIndex = e.NewPageIndex;
1273                         e.NewPageIndex = 0;
1274                 }
1275
1276                 private void ResetEvents ()
1277                 {
1278                         bubblepage = false;
1279                         dataBinding = false;
1280                         pageIndexChanging = false;
1281                         gridViewCancelEdit = false;
1282                         rowDeleting = false;
1283                         rowEditing = false;
1284                         rowUpdating = false;
1285                         selectIndexChanging = false;
1286                         sorting = false;
1287                 }
1288
1289                 // Events variable
1290                 private bool dataBinding;
1291                 private bool dataBound;
1292                 private bool init;
1293                 private bool load;
1294                 private bool pageIndexChanged;
1295                 private bool pageIndexChanging;
1296                 private bool preRender;
1297                 private bool gridViewCancelEdit;
1298                 private bool rowCommand;
1299                 private bool rowCreated;
1300                 private bool rowDataBound;
1301                 private bool rowDeleted;
1302                 private bool rowDeleting;
1303                 private bool rowEditing;
1304                 private bool rowUpdated;
1305                 private bool rowUpdating;
1306                 private bool selectIndexChanged;
1307                 private bool selectIndexChanging;
1308                 private bool sorted;
1309                 private bool sorting;
1310                 private bool unload;
1311
1312                 [Test]
1313                 public void GridView_Events ()
1314                 {
1315                         PokerGridView gv = new PokerGridView ();
1316                         gv.DataSource = myds;
1317
1318                         gv.DataBinding += new EventHandler (gv_DataBinding);
1319                         gv.DataBound += new EventHandler (gv_DataBound);
1320                         gv.PageIndexChanging += new GridViewPageEventHandler (gv_PageIndexChanging);
1321                         gv.PageIndexChanged += new EventHandler (gv_PageIndexChanged);
1322                         gv.PreRender += new EventHandler (gv_PreRender);
1323                         gv.RowCancelingEdit += new GridViewCancelEditEventHandler (gv_RowCancelingEdit);
1324                         gv.RowCommand += new GridViewCommandEventHandler (gv_RowCommand);
1325                         gv.RowCreated += new GridViewRowEventHandler (gv_RowCreated);
1326                         gv.RowDataBound += new GridViewRowEventHandler (gv_RowDataBound);
1327                         gv.RowDeleted += new GridViewDeletedEventHandler(gv_RowDeleted);
1328                         gv.RowDeleting+= new GridViewDeleteEventHandler(gv_RowDeleting);
1329                         gv.RowEditing+=new GridViewEditEventHandler(gv_RowEditing);
1330                         gv.RowUpdated+= new GridViewUpdatedEventHandler(gv_RowUpdated);
1331                         gv.RowUpdating+=new GridViewUpdateEventHandler(gv_RowUpdating);
1332                         gv.SelectedIndexChanged +=new EventHandler(gv_SelectedIndexChanged);
1333                         gv.SelectedIndexChanging+=new GridViewSelectEventHandler(gv_SelectedIndexChanging);
1334                         gv.Sorted +=new EventHandler(gv_Sorted);
1335                         gv.Sorting +=new GridViewSortEventHandler(gv_Sorting);
1336                         gv.Unload+=new EventHandler(gv_Unload);
1337
1338
1339                         Assert.AreEqual (false, dataBinding, "BeforeDataBinding");
1340                         gv.DoOnDataBinding (new EventArgs ());
1341                         Assert.AreEqual (true, dataBinding, "AfterDataBinding");
1342                         Assert.AreEqual (false, dataBound, "BeforeDataBound");
1343                         gv.DoOnDataBound (new EventArgs ());
1344                         Assert.AreEqual (true, dataBound, "AfterDataBound");
1345                         Assert.AreEqual (false, pageIndexChanged, "BeforepageIndexChanged");
1346                         gv.DoOnPageIndexChanged (new EventArgs ());
1347                         Assert.AreEqual (true, pageIndexChanged, "AfterpageIndexChanged");
1348                         ResetEvents ();
1349                         Assert.AreEqual (false, pageIndexChanging, "BeforepageIndexChanging");
1350                         gv.DoOnPageIndexChanging (new GridViewPageEventArgs(1));
1351                         Assert.AreEqual (true, pageIndexChanging, "AfterpageIndexChanging");
1352                         Assert.AreEqual (false, preRender, "BeforePreRender");
1353                         gv.DoOnPreRender (new EventArgs ());
1354                         Assert.AreEqual (true, preRender, "AfterPreRender");
1355                         ResetEvents ();
1356                         Assert.AreEqual (false, gridViewCancelEdit, "BeforeGridViewCancelEdit");
1357                         gv.DoOnRowCancelingEdit (new GridViewCancelEditEventArgs (1));
1358                         Assert.AreEqual (true, gridViewCancelEdit, "AfterGridViewCancelEdit");
1359                         ResetEvents ();
1360                         Assert.AreEqual (false, rowCommand, "BeforeRowCommand");
1361                         LinkButton lb= new LinkButton();
1362                         gv.DoOnRowCommand (new GridViewCommandEventArgs(lb,new CommandEventArgs("",null)));
1363                         Assert.AreEqual (true, rowCommand, "AfterRowCommand");
1364                         Assert.AreEqual (false, rowCreated, "BeforeRowCreated");
1365                         gv.DoOnRowCreated (new GridViewRowEventArgs (gv.SelectedRow));
1366                         Assert.AreEqual (true, rowCommand, "AfterRowCreated");
1367                         Assert.AreEqual (false, rowDataBound, "BeforeRowDataBound");
1368                         gv.DoOnRowDataBound (new GridViewRowEventArgs (gv.SelectedRow)); 
1369                         Assert.AreEqual (true, rowDataBound, "AfterRowDataBound");
1370                         Assert.AreEqual (false, rowDeleted, "BeforeRowDeleted");
1371                         gv.DoOnRowDeleted(new GridViewDeletedEventArgs(1,new ArgumentException()));
1372                         Assert.AreEqual (true, rowDeleted, "AfterRowDeleted");
1373                         ResetEvents ();
1374                         Assert.AreEqual (false, rowDeleting, "BeforeRowDeleting");
1375                         gv.DoOnRowDeleting (new GridViewDeleteEventArgs (0));
1376                         Assert.AreEqual (true, rowDeleting, "AfterRowDeleting");
1377                         ResetEvents ();
1378                         Assert.AreEqual (false, rowEditing, "BeforeRowEditing");
1379                         gv.DoOnRowEditing (new GridViewEditEventArgs (0));
1380                         Assert.AreEqual (true, rowEditing, "AfterRowEditing");
1381                         Assert.AreEqual (false, rowUpdated, "BeforeRowUpdated");
1382                         gv.DoOnRowUpdated (new GridViewUpdatedEventArgs(1,new Exception()));
1383                         Assert.AreEqual (true, rowUpdated, "AfterRowUpdated");
1384                         ResetEvents ();
1385                         Assert.AreEqual (false, rowUpdating, "BeforeRowUpdating");
1386                         gv.DoOnRowUpdating (new GridViewUpdateEventArgs (0));
1387                         Assert.AreEqual (true, rowUpdating, "AfterRowUpdating");
1388                         Assert.AreEqual (false, selectIndexChanged, "BeforeSelectedIndexChanged");
1389                         gv.DoOnSelectedIndexChanged (new EventArgs ());
1390                         Assert.AreEqual (true, selectIndexChanged, "AfterSelectedIndexChanged");
1391                         ResetEvents ();
1392                         Assert.AreEqual (false, selectIndexChanging, "BeforeSelectedIndexChanging");
1393                         gv.DoOnSelectedIndexChanging (new GridViewSelectEventArgs (2));
1394                         Assert.AreEqual (true, selectIndexChanging, "AfterSelectedIndexChanging");
1395                         Assert.AreEqual (false, sorted, "BeforeSorted");
1396                         gv.DoOnSorted (new EventArgs ());
1397                         Assert.AreEqual (true, sorted, "AfterSorted");
1398                         Assert.AreEqual (false, sorting, "BeforeSorting");
1399                         gv.DoOnSorting(new GridViewSortEventArgs("",SortDirection.Ascending));
1400                         Assert.AreEqual (true, sorting, "AfterSorting");
1401                         Assert.AreEqual (false, unload, "BeforeUnload");
1402                         gv.DoOnUnload (new EventArgs ());
1403                         Assert.AreEqual (true, unload, "AfterUnload");
1404
1405                 }
1406
1407                 private void gv_Unload (object sender, EventArgs e)
1408                 {
1409                         unload = true;
1410                 }
1411
1412                 private void gv_Sorted (object sender, EventArgs e)
1413                 {
1414                         sorted = true;
1415                 }
1416
1417                 private void gv_SelectedIndexChanged (object sender, EventArgs e)
1418                 {
1419                         selectIndexChanged = true;
1420                 }
1421
1422                 private void gv_RowUpdated (object sender, EventArgs e)
1423                 {
1424                         rowUpdated = true;
1425                 }
1426
1427                 private void gv_RowDeleted (object sender, EventArgs e)
1428                 {
1429                         rowDeleted = true;
1430                 }
1431
1432                 private void gv_RowDataBound (object sender, EventArgs e)
1433                 {
1434                         rowDataBound = true;
1435                 }
1436
1437                 private void gv_RowCreated (object sender, EventArgs e)
1438                 {
1439                         rowCreated = true;
1440                 }
1441                  
1442                 private void gv_RowCommand (object sender, EventArgs e)
1443                 {
1444                         rowCommand = true;
1445                 }
1446
1447                 private void gv_PreRender (object sender, EventArgs e)
1448                 {
1449                         preRender = true;
1450                 }
1451
1452                 private void gv_DataBinding (object sender, EventArgs e)
1453                 {
1454                         dataBinding = true;
1455                 }
1456
1457                 private void gv_DataBound (object sender, EventArgs e)
1458                 {
1459                         dataBound = true;
1460                 }
1461
1462                 private void gv_Init (object sender, EventArgs e)
1463                 {
1464                         init = true;
1465                 }
1466
1467                 private void gv_Load (object sender, EventArgs e)
1468                 {
1469                         load = true;
1470                 }
1471
1472                 private void gv_PageIndexChanged (object sender, EventArgs e)
1473                 {
1474                         pageIndexChanged = true;
1475                 }
1476
1477                 [Test]
1478                 [Category ("NunitWeb")]
1479                 public void GridView_DataSourceChangedEvent ()
1480                 {
1481                         WebTest t = new WebTest ();
1482                         PageDelegates pd = new PageDelegates ();
1483                         pd.Load = GridView_Init;
1484                         pd.PreRenderComplete = GridView_Load;
1485                         t.Invoker = new PageInvoker (pd);
1486                         t.Run ();
1487                         FormRequest fr = new FormRequest (t.Response, "form1");
1488                         fr.Controls.Add ("__EVENTTARGET");
1489                         fr.Controls.Add ("__EVENTARGUMENT");
1490                         fr.Controls["__EVENTTARGET"].Value = "";
1491                         fr.Controls["__EVENTARGUMENT"].Value = "";
1492                         t.Request = fr;
1493                         t.Run ();
1494                         if (t.UserData == null)
1495                                 Assert.Fail ("DataSourceChangedEvent#1");
1496                         Assert.AreEqual ("Data_rebounded", t.UserData.ToString (), "DataSourceChangedEvent#2");
1497                 }
1498
1499                 #region GridView_DataSourceChangedEvent
1500                 public static void GridView_Init (Page p)
1501                 {
1502                         PokerGridView gv = new PokerGridView ();
1503                         DS data = new DS ();
1504                         p.Controls.Add (gv);
1505                         p.Controls.Add (data);
1506                         data.TypeName = typeof (DS).AssemblyQualifiedName;
1507                         data.SelectMethod = "GetList";
1508                         data.ID = "Data";
1509                         gv.DataBinding += new EventHandler (data_DataBinding);
1510                         gv.DataSourceID = "Data";
1511                 }
1512
1513                 public static void GridView_Load (Page p)
1514                 {
1515                         if (p.IsPostBack) {
1516                                 DS data = (DS) p.FindControl ("Data");
1517                                 if (data == null)
1518                                         Assert.Fail ("Data soource control not created#1");
1519                                 data.DoRaiseDataSourceChangedEvent (new EventArgs ());
1520                         }
1521                 }
1522
1523                 public static void data_DataBinding (object sender, EventArgs e)
1524                 {
1525                         if (((WebControl) sender).Page.IsPostBack)
1526                                 WebTest.CurrentTest.UserData = "Data_rebounded";
1527                 }
1528                 #endregion
1529
1530                 [Test]
1531                 public void GridView_PerformDataBiding ()
1532                 {
1533                         PokerGridView gv = new PokerGridView ();
1534                         gv.DoPerformDataBinding (myds);
1535                         Assert.AreEqual (6, gv.Rows.Count, "PerformDataBiding_Rows");
1536                 }
1537
1538                 [Test]
1539                 public void GridView_PrepareControlHierarchy ()
1540                 {
1541                         PokerGridView gv = new PokerGridView ();
1542                         gv.controlHierarchy = false;
1543                         gv.Render ();
1544                         Assert.AreEqual (0, gv.Controls.Count, "ControlHierarchy_ControlsCount");
1545                         Assert.AreEqual (true, gv.controlHierarchy, "ControlHierarchy_FirstFlow");
1546                         gv.DataSource = myds;
1547                         gv.DataBind ();
1548                         gv.controlHierarchy = false;
1549                         gv.Render ();
1550                         Assert.AreEqual (1, gv.Controls.Count, "ControlHierarchy_ControlsCountSecondaryFlow");
1551                         Assert.AreEqual (true, gv.controlHierarchy, "ControlHierarchy_SecondaryFlow");
1552                 }
1553
1554                 [Test]
1555                 public void GridView_State ()
1556                 {
1557                         PokerGridView g = new PokerGridView ();
1558                         PokerGridView copy = new PokerGridView ();
1559
1560                         string[] test = new String[1];
1561                         test[0] = "test";
1562                         g.DataKeyNames = test;
1563                         g.EditIndex = 0;
1564                         g.PageIndex = 2;
1565                                         
1566                         object state = g.DoSaveControlState ();
1567                         copy.DoLoadControlState (state);
1568
1569                         Assert.AreEqual ("test", copy.DataKeyNames[0], "DataKeyNames");
1570                         Assert.AreEqual (0, copy.EditIndex, "EditIndex");
1571                         Assert.AreEqual (2, copy.PageIndex, "PageIndex");
1572                         
1573                 }
1574
1575                 [Test]
1576                 public void GridView_DefaultsRender ()
1577                 {
1578                         PokerGridView b = new PokerGridView ();
1579                         string html = b.Render ();
1580                         Assert.AreEqual(-1 ,b.Render().IndexOf("table"), "RenderViewState");
1581                 }
1582
1583                 [Test]
1584                 public void GridView_Render ()
1585                 {
1586                         PokerGridView b = new PokerGridView ();
1587                         b.DataSource = myds;
1588                         b.DataBind ();
1589                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">Item</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Norway</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Sweden</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>France</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Italy</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Israel</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Russia</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1590                         string RenderedControlHtml = b.Render ();
1591                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Rendering");
1592                 }
1593
1594                 [Test]
1595                 public void GridView_RenderAllowPaging ()
1596                 {
1597                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderAllowPaging)).Run ();
1598                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1599 #if NET_4_0
1600                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">Item</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Norway</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Sweden</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><span>1</span></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Page$2&#39;)\">2</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1601 #else
1602                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">Item</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Norway</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Sweden</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><table border=\"0\">\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><span>1</span></td><td><a href=\"javascript:__doPostBack('ctl01','Page$2')\">2</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1603 #endif
1604                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderDefault");
1605                 }
1606
1607                 public static void RenderAllowPaging (Page p)
1608                 {
1609                         ArrayList myds = new ArrayList ();
1610                         myds.Add ("Norway");
1611                         myds.Add ("Sweden");
1612                         myds.Add ("France");
1613                         myds.Add ("Italy");
1614                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
1615                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
1616                         PokerGridView b = new PokerGridView ();
1617                         p.Form.Controls.Add (lcb);
1618                         p.Form.Controls.Add (b);
1619                         b.AllowPaging = true;
1620                         b.PageSize = 2;
1621                         b.DataSource = myds;
1622                         b.DataBind ();
1623                         p.Form.Controls.Add (lce);
1624                 }
1625
1626                 [Test]
1627                 [Category("NunitWeb")]
1628                 public void GridView_RenderAllowPaging2 ()
1629                 {
1630                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderAllowPaging2)).Run ();
1631                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1632 #if NET_4_0
1633                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">Item</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>France</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Italy</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Page$1&#39;)\">1</a></td><td><span>2</span></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Page$3&#39;)\">3</a></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Page$4&#39;)\">4</a></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Page$5&#39;)\">...</a></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Page$Last&#39;)\">&gt;&gt;</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1634 #else
1635                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">Item</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>France</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Italy</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><table border=\"0\">\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><a href=\"javascript:__doPostBack('ctl01','Page$1')\">1</a></td><td><span>2</span></td><td><a href=\"javascript:__doPostBack('ctl01','Page$3')\">3</a></td><td><a href=\"javascript:__doPostBack('ctl01','Page$4')\">4</a></td><td><a href=\"javascript:__doPostBack('ctl01','Page$5')\">...</a></td><td><a href=\"javascript:__doPostBack('ctl01','Page$Last')\">&gt;&gt;</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1636 #endif
1637                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderDefault");
1638                 }
1639
1640                 public static void RenderAllowPaging2 (Page p)
1641                 {
1642                         ArrayList myds = new ArrayList ();
1643                         myds.Add ("Norway");
1644                         myds.Add ("Sweden");
1645                         myds.Add ("France");
1646                         myds.Add ("Italy");
1647                         myds.Add ("Norway");
1648                         myds.Add ("Sweden");
1649                         myds.Add ("France");
1650                         myds.Add ("Italy");
1651                         myds.Add ("Norway");
1652                         myds.Add ("Sweden");
1653                         myds.Add ("France");
1654                         myds.Add ("Italy");
1655                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
1656                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
1657                         PokerGridView b = new PokerGridView ();
1658                         p.Form.Controls.Add (lcb);
1659                         p.Form.Controls.Add (b);
1660                         b.AllowPaging = true;
1661                         b.PageSize = 2;
1662                         b.PageIndex = 1;
1663                         b.PagerSettings.PageButtonCount = 4;
1664                         b.PagerSettings.Mode= PagerButtons.NumericFirstLast;
1665                         b.DataSource = myds;
1666                         b.DataBind ();
1667                         p.Form.Controls.Add (lce);
1668                 }
1669
1670                 [Test]
1671                 public void GridView_RenderProperty ()
1672                 {
1673                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderProperty)).Run ();
1674                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1675 #if NET_4_0
1676                                 string OriginControlHtml = "<div id=\"__gvctl01__div\">\r\n\t<table cellspacing=\"1\" cellpadding=\"0\" align=\"Justify\" rules=\"rows\" border=\"1\" style=\"background-image:url(http://test);\">\r\n\t\t<caption align=\"Left\">\r\n\t\t\ttest\r\n\t\t</caption><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Edit$0&#39;)\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Delete$0&#39;)\">Delete</a></td><td>Norway</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Edit$1&#39;)\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Delete$1&#39;)\">Delete</a></td><td>Sweden</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Edit$2&#39;)\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Delete$2&#39;)\">Delete</a></td><td>France</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Edit$3&#39;)\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Delete$3&#39;)\">Delete</a></td><td>Italy</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>&nbsp;</td><td>&nbsp;</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1677 #else
1678                         string OriginControlHtml = "<div id=\"__gvctl01__div\">\r\n\t<table cellspacing=\"1\" cellpadding=\"0\" align=\"Justify\" rules=\"rows\" border=\"1\" style=\"background-image:url(http://test);\">\r\n\t\t<caption align=\"Left\">\r\n\t\t\ttest\r\n\t\t</caption><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack('ctl01','Edit$0')\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack('ctl01','Delete$0')\">Delete</a></td><td>Norway</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack('ctl01','Edit$1')\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack('ctl01','Delete$1')\">Delete</a></td><td>Sweden</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack('ctl01','Edit$2')\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack('ctl01','Delete$2')\">Delete</a></td><td>France</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack('ctl01','Edit$3')\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack('ctl01','Delete$3')\">Delete</a></td><td>Italy</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>&nbsp;</td><td>&nbsp;</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1679 #endif
1680                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderDefault");
1681                 }
1682
1683                 public static void RenderProperty (Page p)
1684                 {
1685                         // Array list for simple datasource
1686                         ArrayList myds = new ArrayList ();
1687                         myds.Add ("Norway");
1688                         myds.Add ("Sweden");
1689                         myds.Add ("France");
1690                         myds.Add ("Italy");
1691                         
1692                         // Helper controls for searching usefull data from page 
1693                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
1694                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
1695                         PokerGridView g = new PokerGridView ();
1696                         
1697                         // Changing some property for test
1698                         g.AutoGenerateDeleteButton = true;
1699                         g.AutoGenerateEditButton = true;
1700                         g.BackImageUrl = "http://test";
1701                         g.Caption = "test";
1702                         g.CaptionAlign = TableCaptionAlign.Left;
1703                         g.CellPadding = 0;
1704                         g.CellSpacing = 1;
1705                         g.EnableSortingAndPagingCallbacks = true;
1706                         g.GridLines = GridLines.Horizontal;
1707                         g.HorizontalAlign = HorizontalAlign.Justify;
1708                         g.ShowFooter = true;
1709                         g.ShowHeader = false;
1710                         g.UseAccessibleHeader = false;
1711                         
1712                         // Add controls for page
1713                         p.Form.Controls.Add (lcb);
1714                         p.Form.Controls.Add (g);
1715                         
1716                         // Data source and bind
1717                         g.DataSource = myds;
1718                         g.DataBind ();
1719                         p.Form.Controls.Add (lce);
1720                 }
1721
1722                 /// <summary>
1723                 /// From here rendering all possible field types and kinds of 
1724                 /// templates 
1725                 /// </summary>
1726
1727                 [Test]
1728                 public void GridView_RenderingBoundField ()
1729                 {
1730                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderingBoundField)).Run ();
1731                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1732                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">HeaderText</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>2</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FooterText</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1733                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderingBoundField");
1734                 }
1735
1736                 [Test]
1737                 public void GridView_RenderingCheckBoxField ()
1738                 {
1739                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderingCheckBoxField)).Run ();
1740                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1741 #if NET_4_0
1742                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">HeaderText</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><span class=\"aspNetDisabled\"><input id=\"ctl01_ctl00_0\" type=\"checkbox\" name=\"ctl01$ctl02$ctl00\" checked=\"checked\" disabled=\"disabled\" /></span></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><span class=\"aspNetDisabled\"><input id=\"ctl01_ctl00_1\" type=\"checkbox\" name=\"ctl01$ctl03$ctl00\" disabled=\"disabled\" /></span></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FooterText</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1743 #else
1744                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">HeaderText</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><span disabled=\"disabled\"><input id=\"ctl01_ctl02_ctl00\" type=\"checkbox\" name=\"ctl01$ctl02$ctl00\" checked=\"checked\" disabled=\"disabled\" /></span></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><span disabled=\"disabled\"><input id=\"ctl01_ctl03_ctl00\" type=\"checkbox\" name=\"ctl01$ctl03$ctl00\" disabled=\"disabled\" /></span></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FooterText</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1745 #endif
1746                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderingCheckBoxField");
1747                 }
1748
1749                 [Test]
1750                 public void GridView_RenderingCheckBoxField2 ()
1751                 {
1752                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderingCheckBoxField2)).Run ();
1753                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1754 #if NET_4_0
1755                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">bool</th><th scope=\"col\">str</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><span class=\"aspNetDisabled\" title=\"bool\"><input id=\"ctl01_ctl00_0\" type=\"checkbox\" name=\"ctl01$ctl02$ctl00\" checked=\"checked\" disabled=\"disabled\" /></span></td><td>1</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><span class=\"aspNetDisabled\" title=\"bool\"><input id=\"ctl01_ctl00_1\" type=\"checkbox\" name=\"ctl01$ctl03$ctl00\" disabled=\"disabled\" /></span></td><td>2</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>&nbsp;</td><td>&nbsp;</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1756 #else
1757                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">bool</th><th scope=\"col\">str</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><span disabled=\"disabled\" title=\"bool\"><input id=\"ctl01_ctl02_ctl00\" type=\"checkbox\" name=\"ctl01$ctl02$ctl00\" checked=\"checked\" disabled=\"disabled\" /></span></td><td>1</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><span disabled=\"disabled\" title=\"bool\"><input id=\"ctl01_ctl03_ctl00\" type=\"checkbox\" name=\"ctl01$ctl03$ctl00\" disabled=\"disabled\" /></span></td><td>2</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>&nbsp;</td><td>&nbsp;</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1758 #endif
1759                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderingCheckBoxField2");
1760                 }
1761                 
1762                 [Test]
1763                 public void GridView_RenderingImageField ()
1764                 {
1765                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderingImageField)).Run ();
1766                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1767 #if NET_4_0
1768                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">HeaderText</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><img src=\"1\" alt=\"1\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><img src=\"2\" alt=\"2\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FooterText</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1769 #else
1770                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">HeaderText</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><img src=\"1\" alt=\"1\" style=\"border-width:0px;\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><img src=\"2\" alt=\"2\" style=\"border-width:0px;\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FooterText</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1771 #endif
1772                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderingImageField");
1773                 }
1774
1775                 [Test]
1776                 public void GridView_RenderingCommandField ()
1777                 {
1778                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderingCommandField)).Run ();
1779                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1780 #if NET_4_0
1781                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">HeaderText</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Edit$0&#39;)\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Delete$0&#39;)\">Delete</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;New$0&#39;)\">New</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Select$0&#39;)\">Select</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Edit$1&#39;)\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Delete$1&#39;)\">Delete</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;New$1&#39;)\">New</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Select$1&#39;)\">Select</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FooterText</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1782 #else
1783                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">HeaderText</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack('ctl01','Edit$0')\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack('ctl01','Delete$0')\">Delete</a>&nbsp;<a href=\"javascript:__doPostBack('ctl01','New$0')\">New</a>&nbsp;<a href=\"javascript:__doPostBack('ctl01','Select$0')\">Select</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack('ctl01','Edit$1')\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack('ctl01','Delete$1')\">Delete</a>&nbsp;<a href=\"javascript:__doPostBack('ctl01','New$1')\">New</a>&nbsp;<a href=\"javascript:__doPostBack('ctl01','Select$1')\">Select</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FooterText</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1784 #endif
1785                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderingCommandField");
1786                 }
1787
1788                 [Test]
1789                 public void GridView_RenderingHyperLinkField ()
1790                 {
1791                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderingHyperLinkField)).Run ();
1792                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1793                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">HeaderText</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"1\">1</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><a href=\"2\">2</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FooterText</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1794                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderingHyperLinkField");
1795                 }
1796
1797                 [Test]
1798                 public void GridView_RenderingButtonField ()
1799                 {
1800                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderingButtonField)).Run ();
1801                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1802 #if NET_4_0
1803                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">HeaderText</th><th scope=\"col\">HeaderText</th><th scope=\"col\">HeaderText</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><input type=\"button\" value=\"1\" onclick=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;$0&#39;)\" /></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;cmd2$0&#39;)\">1</a></td><td><input type=\"image\" src=\"\" alt=\"1\" onclick=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;cmd3$0&#39;);return false;\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><input type=\"button\" value=\"2\" onclick=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;$1&#39;)\" /></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;cmd2$1&#39;)\">2</a></td><td><input type=\"image\" src=\"\" alt=\"2\" onclick=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;cmd3$1&#39;);return false;\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FooterText</td><td>FooterText</td><td>FooterText</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1804 #else
1805                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">HeaderText</th><th scope=\"col\">HeaderText</th><th scope=\"col\">HeaderText</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><input type=\"button\" value=\"1\" onclick=\"javascript:__doPostBack('ctl01','$0')\" /></td><td><a href=\"javascript:__doPostBack('ctl01','cmd2$0')\">1</a></td><td><input type=\"image\" src=\"\" alt=\"1\" onclick=\"javascript:__doPostBack('ctl01','cmd3$0')\" style=\"border-width:0px;\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><input type=\"button\" value=\"2\" onclick=\"javascript:__doPostBack('ctl01','$1')\" /></td><td><a href=\"javascript:__doPostBack('ctl01','cmd2$1')\">2</a></td><td><input type=\"image\" src=\"\" alt=\"2\" onclick=\"javascript:__doPostBack('ctl01','cmd3$1')\" style=\"border-width:0px;\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FooterText</td><td>FooterText</td><td>FooterText</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1806 #endif
1807                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderingButtonField");
1808                 }
1809
1810                 [Test (Description="Bug #551666")]
1811                 public void TableSections_Bug551666 ()
1812                 {
1813                         string html = new WebTest ("TableSections_Bug551666.aspx").Run ();
1814                         string renderedHtml = HtmlDiff.GetControlFromPageHtml (html);
1815                         string originalHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"GridView1\" style=\"border-collapse:collapse;\">\r\n\t\t<thead>\r\n\t\t\t<tr>\r\n\t\t\t\t<th scope=\"col\">Dosage</th><th scope=\"col\">Drug</th><th scope=\"col\">Patient</th><th scope=\"col\">Date</th>\r\n\t\t\t</tr>\r\n\t\t</thead><tbody>\r\n\t\t\t<tr>\r\n\t\t\t\t<td>25</td><td>Indocin</td><td>David</td><td>2009-11-13</td>\r\n\t\t\t</tr><tr>\r\n\t\t\t\t<td>50</td><td>Enebrel</td><td>Sam</td><td>2009-11-13</td>\r\n\t\t\t</tr><tr>\r\n\t\t\t\t<td>10</td><td>Hydralazine</td><td>Christoff</td><td>2009-11-13</td>\r\n\t\t\t</tr><tr>\r\n\t\t\t\t<td>21</td><td>Combivent</td><td>Janet</td><td>2009-11-13</td>\r\n\t\t\t</tr><tr>\r\n\t\t\t\t<td>100</td><td>Dilantin</td><td>Melanie</td><td>2009-11-13</td>\r\n\t\t\t</tr>\r\n\t\t</tbody><tfoot>\r\n\r\n\t\t</tfoot>\r\n\t</table>\r\n</div>";
1816                         
1817                         HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "#A1");
1818                 }
1819                 
1820                 [Test]
1821                 public void GridView_RenderingTemplateField ()
1822                 {
1823                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (RenderingTemplateField)).Run ();
1824                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
1825 #if NET_4_0
1826                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"grid\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\"><input name=\"grid$ctl01$TextBox1\" type=\"text\" id=\"grid_TextBox1\" /></th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><input name=\"grid$ctl02$TextBox1\" type=\"text\" value=\"1\" id=\"grid_TextBox1_0\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><input name=\"grid$ctl03$TextBox1\" type=\"text\" value=\"2\" id=\"grid_TextBox1_1\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><input name=\"grid$ctl04$TextBox1\" type=\"text\" id=\"grid_TextBox1\" /></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1827 #else
1828                         string OriginControlHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"grid\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\"><input name=\"grid$ctl01$TextBox1\" type=\"text\" id=\"grid_ctl01_TextBox1\" /></th>\r\n\t\t</tr><tr>\r\n\t\t\t<td><input name=\"grid$ctl02$TextBox1\" type=\"text\" value=\"1\" id=\"grid_ctl02_TextBox1\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><input name=\"grid$ctl03$TextBox1\" type=\"text\" value=\"2\" id=\"grid_ctl03_TextBox1\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td><input name=\"grid$ctl04$TextBox1\" type=\"text\" id=\"grid_ctl04_TextBox1\" /></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1829 #endif
1830                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderingTemplateField");
1831                 }
1832                 
1833                 public static void RenderingTemplateField (Page p)
1834                 {
1835                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
1836                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
1837                         GridView grid = new GridView ();
1838                         grid.ID = "grid";
1839                         grid.AutoGenerateColumns = false;
1840                         grid.ShowFooter = true;
1841                         TemplateField templatefield = new TemplateField ();
1842                         templatefield.InsertVisible = true;
1843                         templatefield.Visible = true;
1844                         templatefield.HeaderText = "HeaderText";
1845                         templatefield.FooterText = "FooterText";
1846                         templatefield.ItemTemplate = new CompiledTemplateBuilder(BuildControl_itemtemplate);
1847                         templatefield.HeaderTemplate = new CompiledTemplateBuilder (BuildControl_itemtemplate);
1848                         templatefield.FooterTemplate= new CompiledTemplateBuilder (BuildControl_itemtemplate);
1849                         grid.DataSource = GridViewTest.CreateDataSource ();
1850                         grid.Columns.Add (templatefield);
1851                         p.Form.Controls.Add (lcb);
1852                         p.Form.Controls.Add (grid);
1853                         p.Form.Controls.Add (lce);
1854                         grid.DataBind ();
1855                 }
1856
1857                 private static void BuildControl_itemtemplate (Control container)
1858                 {
1859                         TextBox ctrl;
1860                         ctrl = new TextBox ();
1861                         ctrl.ID = "TextBox1";
1862                         ctrl.DataBinding += MyDataBinding;
1863                         container.Controls.Add (ctrl);
1864                 }
1865
1866                 private static void MyDataBinding (object sender, EventArgs e)
1867                 {
1868                         TextBox Target;
1869                         IDataItemContainer Container;
1870                         Target = (TextBox) sender;
1871                         Container = (IDataItemContainer) Target.BindingContainer;
1872                         if ((Target.Page.GetDataItem () != null))
1873                                 Target.Text = Convert.ToString (DataBinder.Eval (Target.Page.GetDataItem(),"str"));
1874                 }
1875
1876
1877                 public static void RenderingButtonField (Page p)
1878                 {
1879                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
1880                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
1881                         GridView grid = new GridView ();
1882                         grid.AutoGenerateColumns = false;
1883                         grid.ShowFooter = true;
1884                         p.Form.Controls.Add (lcb);
1885                         p.Form.Controls.Add (grid);
1886                         p.Form.Controls.Add (lce);
1887
1888                         ButtonField buttonfield = new ButtonField ();
1889                         buttonfield.HeaderText = "HeaderText";
1890                         buttonfield.FooterText = "FooterText";
1891                         buttonfield.ButtonType = ButtonType.Button;
1892                         buttonfield.DataTextField = STRINGFIELD;
1893
1894                         ButtonField buttonfieldlink = new ButtonField ();
1895                         buttonfieldlink.HeaderText = "HeaderText";
1896                         buttonfieldlink.FooterText = "FooterText";
1897                         buttonfieldlink.ButtonType = ButtonType.Link;
1898                         buttonfieldlink.DataTextField = STRINGFIELD;
1899                         buttonfieldlink.CommandName = "cmd2";
1900
1901                         ButtonField buttonfieldimage = new ButtonField ();
1902                         buttonfieldimage.HeaderText = "HeaderText";
1903                         buttonfieldimage.FooterText = "FooterText";
1904                         buttonfieldimage.ButtonType = ButtonType.Image;
1905                         buttonfieldimage.DataTextField = STRINGFIELD;
1906                         buttonfieldimage.CommandName = "cmd3";
1907
1908                         grid.DataSource = GridViewTest.CreateDataSource ();
1909                         grid.Columns.Add (buttonfield);
1910                         grid.Columns.Add (buttonfieldlink);
1911                         grid.Columns.Add (buttonfieldimage);
1912                         grid.DataBind ();
1913                 }
1914
1915                 public static void RenderingHyperLinkField (Page p)
1916                 {
1917                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
1918                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
1919                         GridView grid = new GridView ();
1920                         grid.AutoGenerateColumns = false;
1921                         grid.ShowFooter = true;
1922                         p.Form.Controls.Add (lcb);
1923                         p.Form.Controls.Add (grid);
1924                         p.Form.Controls.Add (lce);
1925                         HyperLinkField hyperlinkfield = new HyperLinkField ();
1926                         hyperlinkfield.DataTextField = STRINGFIELD;
1927                         string[] str = new string[] { STRINGFIELD };
1928                         hyperlinkfield.DataNavigateUrlFields = str;
1929                         hyperlinkfield.HeaderText = "HeaderText";
1930                         hyperlinkfield.FooterText = "FooterText";
1931                         grid.DataSource = GridViewTest.CreateDataSource ();
1932                         grid.Columns.Add (hyperlinkfield);
1933                         grid.DataBind ();
1934                 }
1935
1936                 public static void RenderingCommandField (Page p)
1937                 {
1938                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
1939                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
1940                         GridView grid = new GridView ();
1941                         grid.AutoGenerateColumns = false;
1942                         grid.ShowFooter = true;
1943                         p.Form.Controls.Add (lcb);
1944                         p.Form.Controls.Add (grid);
1945                         p.Form.Controls.Add (lce);
1946                         CommandField commandfield = new CommandField ();
1947                         commandfield.HeaderText = "HeaderText";
1948                         commandfield.FooterText = "FooterText";
1949                         commandfield.ShowCancelButton = true;
1950                         commandfield.ShowDeleteButton = true;
1951                         commandfield.ShowEditButton = true;
1952                         commandfield.ShowInsertButton = true;
1953                         commandfield.ShowSelectButton = true;
1954                         grid.DataSource = GridViewTest.CreateDataSource ();
1955                         grid.Columns.Add (commandfield);
1956                         grid.DataBind ();
1957                 }
1958
1959                 public static void RenderingImageField (Page p)
1960                 {
1961                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
1962                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
1963                         GridView grid = new GridView ();
1964                         grid.AutoGenerateColumns = false;
1965                         grid.ShowFooter = true;
1966                         p.Form.Controls.Add (lcb);
1967                         p.Form.Controls.Add (grid);
1968                         p.Form.Controls.Add (lce);
1969                         ImageField imagefield = new ImageField ();
1970                         imagefield.HeaderText = "HeaderText";
1971                         imagefield.FooterText = "FooterText";
1972                         imagefield.DataImageUrlField = STRINGFIELD;
1973                         imagefield.DataAlternateTextField = STRINGFIELD;
1974                         grid.DataSource = GridViewTest.CreateDataSource ();
1975                         grid.Columns.Add (imagefield);
1976                         grid.DataBind ();
1977                 }
1978
1979                 public static void RenderingBoundField (Page p)
1980                 {
1981                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
1982                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
1983                         GridView grid = new GridView ();
1984                         grid.AutoGenerateColumns = false;
1985                         grid.ShowFooter = true;
1986                         p.Form.Controls.Add (lcb);
1987                         p.Form.Controls.Add (grid);
1988                         p.Form.Controls.Add (lce);
1989                         BoundField boundfield = new BoundField ();
1990                         boundfield.DataField = STRINGFIELD;
1991                         boundfield.HeaderText = "HeaderText";
1992                         boundfield.FooterText = "FooterText";
1993                         grid.DataSource = GridViewTest.CreateDataSource ();
1994                         grid.Columns.Add (boundfield);
1995                         grid.DataBind ();
1996                 }
1997
1998                 public static void RenderingCheckBoxField (Page p)
1999                 {
2000                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
2001                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
2002                         GridView grid = new GridView ();
2003                         grid.AutoGenerateColumns = false;
2004                         grid.ShowFooter = true;
2005                         CheckBoxField checkboxfield = new CheckBoxField ();
2006                         checkboxfield.DataField = BOOLFIELD;
2007                         checkboxfield.HeaderText = "HeaderText";
2008                         checkboxfield.FooterText = "FooterText";
2009                         p.Form.Controls.Add (lcb);
2010                         p.Form.Controls.Add (grid);
2011                         p.Form.Controls.Add (lce);
2012                         grid.DataSource = GridViewTest.CreateDataSource ();
2013                         grid.Columns.Add (checkboxfield);
2014                         grid.DataBind ();
2015                 }
2016
2017                 public static void RenderingCheckBoxField2 (Page p)
2018                 {
2019                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
2020                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
2021                         GridView grid = new GridView ();
2022                         grid.AutoGenerateColumns = true;
2023                         grid.ShowFooter = true;
2024                         p.Form.Controls.Add (lcb);
2025                         p.Form.Controls.Add (grid);
2026                         p.Form.Controls.Add (lce);
2027                         grid.DataSource = GridViewTest.CreateDataSource ();
2028                         grid.DataBind ();
2029                 }
2030                 ///////////////////////////////////////////////////////
2031                 /////              GRIDVIEW   POSTBACK           //////
2032                 ///////////////////////////////////////////////////////
2033
2034                 [Test]
2035                 public void GridView_GetPostBackOptions ()
2036                 {
2037                         GridView gv = new GridView ();
2038                         gv.Page = new Page ();
2039                         IButtonControl btn = new Button ();
2040                         btn.CausesValidation = false;
2041                         Assert.IsFalse (btn.CausesValidation);
2042                         Assert.AreEqual (String.Empty, btn.CommandName);
2043                         Assert.AreEqual (String.Empty, btn.CommandArgument);
2044                         Assert.AreEqual (String.Empty, btn.PostBackUrl);
2045                         Assert.AreEqual (String.Empty, btn.ValidationGroup);
2046                         PostBackOptions options = ((IPostBackContainer) gv).GetPostBackOptions (btn);
2047                         Assert.IsFalse (options.PerformValidation);
2048                         Assert.IsFalse (options.AutoPostBack);
2049                         Assert.IsFalse (options.TrackFocus);
2050                         Assert.IsTrue (options.ClientSubmit);
2051                         Assert.IsTrue (options.RequiresJavaScriptProtocol);
2052                         Assert.AreEqual ("$", options.Argument);
2053                         Assert.AreEqual (null, options.ActionUrl);
2054                         Assert.AreEqual (null, options.ValidationGroup);
2055
2056                         btn.ValidationGroup = "VG";
2057                         btn.CommandName = "CMD";
2058                         btn.CommandArgument = "ARG";
2059                         btn.PostBackUrl = "Page.aspx";
2060                         Assert.IsFalse (btn.CausesValidation);
2061                         Assert.AreEqual ("CMD", btn.CommandName);
2062                         Assert.AreEqual ("ARG", btn.CommandArgument);
2063                         Assert.AreEqual ("Page.aspx", btn.PostBackUrl);
2064                         Assert.AreEqual ("VG", btn.ValidationGroup);
2065                         options = ((IPostBackContainer) gv).GetPostBackOptions (btn);
2066                         Assert.IsFalse (options.PerformValidation);
2067                         Assert.IsFalse (options.AutoPostBack);
2068                         Assert.IsFalse (options.TrackFocus);
2069                         Assert.IsTrue (options.ClientSubmit);
2070                         Assert.IsTrue (options.RequiresJavaScriptProtocol);
2071                         Assert.AreEqual ("CMD$ARG", options.Argument);
2072                         Assert.AreEqual (null, options.ActionUrl);
2073                         Assert.AreEqual (null, options.ValidationGroup);
2074                 }
2075
2076                 [Test]
2077                 [ExpectedException (typeof (InvalidOperationException))]
2078                 public void GridView_GetPostBackOptions_CausesValidation ()
2079                 {
2080                         GridView gv = new GridView ();
2081                         gv.Page = new Page ();
2082                         IButtonControl btn = new Button ();
2083                         Assert.IsTrue (btn.CausesValidation);
2084                         Assert.AreEqual (String.Empty, btn.CommandName);
2085                         Assert.AreEqual (String.Empty, btn.CommandArgument);
2086                         Assert.AreEqual (String.Empty, btn.PostBackUrl);
2087                         Assert.AreEqual (String.Empty, btn.ValidationGroup);
2088                         PostBackOptions options = ((IPostBackContainer) gv).GetPostBackOptions (btn);
2089                 }
2090                 
2091                 [Test]
2092                 [ExpectedException(typeof(ArgumentNullException))]
2093                 public void GridView_GetPostBackOptions_Null_Argument ()
2094                 {
2095                         GridView gv = new GridView ();
2096                         gv.Page = new Page ();
2097                         PostBackOptions options = ((IPostBackContainer) gv).GetPostBackOptions (null);
2098                 }
2099
2100                 [Test]
2101                 [Category ("NunitWeb")]
2102                 public void GridView_PostBackSotring ()
2103                 {
2104                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (GridView_postback));
2105                         string pageHTML = t.Run ();
2106                         Assert.AreEqual (-1, pageHTML.IndexOf ("SortingSuccess"), "BeforeSorting");
2107                         FormRequest fr = new FormRequest (t.Response, "form1");
2108                         fr.Controls.Add ("__EVENTTARGET");
2109                         fr.Controls.Add ("__EVENTARGUMENT");
2110                         fr.Controls["__EVENTTARGET"].Value = "mygrid";
2111                         fr.Controls["__EVENTARGUMENT"].Value = "Sort$Item";
2112                         t.Request = fr;
2113                         t.Invoker = PageInvoker.CreateOnLoad (GridView_postback);
2114                         pageHTML = t.Run ();
2115                         if (pageHTML.IndexOf ("SortingSuccess") < 0)
2116                                 Assert.Fail ("SortingFail");
2117                 }
2118
2119                 [Test]
2120                 [Category ("NunitWeb")]
2121                 public void GridView_PostBackPaging ()
2122                 {
2123                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (GridView_postback));
2124                         string pageHTML = t.Run ();
2125                         Assert.AreEqual (-1, pageHTML.IndexOf ("PagingSuccess"), "BeforePaging");
2126                         FormRequest fr = new FormRequest (t.Response, "form1");
2127                         fr.Controls.Add ("__EVENTTARGET");
2128                         fr.Controls.Add ("__EVENTARGUMENT");
2129                         fr.Controls["__EVENTTARGET"].Value = "mygrid";
2130                         fr.Controls["__EVENTARGUMENT"].Value = "Page$2";
2131                         t.Request = fr;
2132                         t.Invoker = PageInvoker.CreateOnLoad (GridView_postback);
2133                         pageHTML = t.Run ();
2134                         if (pageHTML.IndexOf ("PagingSuccess") < 0)
2135                                 Assert.Fail ("PagingFail");
2136                 }
2137
2138                 [Test]
2139                 [Category ("NunitWeb")]
2140                 public void GridView_PostBackDelete ()
2141                 {
2142                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (GridView_postback));
2143                         string pageHTML = t.Run ();
2144                         Assert.AreEqual (-1, pageHTML.IndexOf ("DeleteSuccess"), "BeforeDelete");
2145                         FormRequest fr = new FormRequest (t.Response, "form1");
2146                         fr.Controls.Add ("__EVENTTARGET");
2147                         fr.Controls.Add ("__EVENTARGUMENT");
2148                         fr.Controls["__EVENTTARGET"].Value = "mygrid";
2149                         fr.Controls["__EVENTARGUMENT"].Value = "Delete$0";
2150                         t.Request = fr;
2151                         t.Invoker = PageInvoker.CreateOnLoad (GridView_postback);
2152                         pageHTML = t.Run ();
2153                         if (pageHTML.IndexOf ("DeleteSuccess") < 0)
2154                                 Assert.Fail ("DeleteFail");
2155                 }
2156
2157                 [Test]
2158                 [Category ("NunitWeb")]
2159                 public void GridView_PostBackDeleteItem ()
2160                 {
2161                         WebTest t = new WebTest ();
2162                         PageDelegates pd = new PageDelegates ();
2163                         pd.Load = GridView_postbackdeleteitem;
2164                         pd.PreRenderComplete = GridView_checkrows;
2165                         t.Invoker = new PageInvoker (pd);
2166                         string pageHTML = t.Run ();
2167                         if (pageHTML.IndexOf ("Delete") < 0){
2168                                 Assert.Fail ("BeforeDelete");
2169                         }
2170                         Assert.AreEqual (1, t.UserData , "ObjectDataSource before delete from grid"); 
2171                         FormRequest fr = new FormRequest (t.Response, "form1");
2172                         fr.Controls.Add ("__EVENTTARGET");
2173                         fr.Controls.Add ("__EVENTARGUMENT");
2174                         fr.Controls["__EVENTTARGET"].Value = "Grid";
2175                         fr.Controls["__EVENTARGUMENT"].Value = "Delete$0";
2176                         t.Request = fr;
2177                         pageHTML = t.Run ();
2178                         Assert.AreEqual (0, t.UserData , "ObjectDataSource after delete from grid");
2179                 }
2180
2181                 public static void GridView_checkrows (Page p)
2182                 {
2183                         GridView grid = p.FindControl ("Grid") as GridView;
2184                         if (grid == null)
2185                                 Assert.Fail ("GridView does not created");
2186
2187                         WebTest.CurrentTest.UserData = grid.Rows.Count;
2188                 }
2189
2190                 public static void GridView_postbackdeleteitem (Page p)
2191                 {
2192                         GridView grid = new GridView ();
2193                         ObjectDataSource ds = new ObjectDataSource ();
2194                         ds.ID = "ObjectDataSource2";
2195
2196                         ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataObject";
2197                         ds.SelectMethod = "Select";
2198                         ds.DeleteMethod = "Delete";
2199                         ds.InsertMethod = "Insert";
2200                         ds.UpdateMethod = "Update";
2201                         Parameter p1 = new Parameter ("ID", TypeCode.String);
2202                         Parameter p2 = new Parameter ("FName", TypeCode.String);
2203                         Parameter p3 = new Parameter ("LName", TypeCode.String);
2204                         ds.DeleteParameters.Add (p1);
2205                         ds.DeleteParameters.Add (p2);
2206                         ds.DeleteParameters.Add (p3);
2207                         grid.ID = "Grid";
2208                         grid.DataKeyNames = new string[] { "ID", "FName", "LName" };
2209                         grid.AutoGenerateDeleteButton = true;
2210                         grid.DataSourceID = "ObjectDataSource2";
2211                         p.Form.Controls.Add (ds);
2212                         p.Form.Controls.Add (grid);
2213                 }
2214
2215
2216                 [Test]
2217                 [Category ("NunitWeb")]
2218                 public void GridView_PostBackUpdateItem ()
2219                 {
2220                         WebTest t = new WebTest ();
2221                         PageDelegates pd = new PageDelegates ();
2222                         pd.Load = GridView_postbackupdateitem;
2223                         pd.PreRenderComplete = GridView_checkrowsupdate;
2224                         t.Invoker = new PageInvoker (pd);
2225                         string pageHTML = t.Run ();
2226                         if (pageHTML.IndexOf ("Edit") < 0)
2227                                 Assert.Fail ("BeforeEdit");
2228
2229                         string[] merged_data = t.UserData as string[];
2230                         if (merged_data == null)
2231                                 Assert.Fail ("Grid rows not created#1");
2232                         
2233                         Assert.AreEqual ("1001", merged_data[1], "Row before update#1");
2234                         Assert.AreEqual ("Mahesh", merged_data[2], "Row before update#2");
2235                         Assert.AreEqual ("Chand", merged_data[3], "Row before update#3");
2236
2237                         FormRequest fr = new FormRequest (t.Response, "form1");
2238                         fr.Controls.Add ("__EVENTTARGET");
2239                         fr.Controls.Add ("__EVENTARGUMENT");
2240                         fr.Controls["__EVENTTARGET"].Value = "Grid";
2241                         fr.Controls["__EVENTARGUMENT"].Value = "Edit$0";
2242                         
2243                         t.Request = fr;
2244                         pageHTML = t.Run ();
2245
2246                         merged_data = t.UserData as string[];
2247                         if (merged_data == null)
2248                                 Assert.Fail ("Grid rows not created#2");
2249
2250                         fr = new FormRequest (t.Response, "form1");
2251                         fr.Controls.Add ("__EVENTTARGET");
2252                         fr.Controls.Add ("__EVENTARGUMENT");
2253                         fr.Controls.Add (merged_data[4]);
2254                         fr.Controls.Add (merged_data[5]);
2255                         fr.Controls.Add (merged_data[6]);
2256
2257                         fr.Controls["__EVENTTARGET"].Value = merged_data[0];
2258                         fr.Controls["__EVENTARGUMENT"].Value = "";
2259                         fr.Controls[merged_data[4]].Value = "1001";
2260                         fr.Controls[merged_data[5]].Value = "TestEname";
2261                         fr.Controls[merged_data[6]].Value = "TestLname";
2262                         t.Request = fr;
2263                         pageHTML = t.Run ();
2264
2265                         merged_data = t.UserData as string[];
2266                         if (merged_data == null)
2267                                 Assert.Fail ("Grid rows not created#3");
2268
2269                         Assert.AreEqual ("1001", merged_data[1], "Row before update#1");
2270                         Assert.AreEqual ("TestEname", merged_data[2], "Row before update#2");
2271                         Assert.AreEqual ("TestLname", merged_data[3], "Row before update#3");
2272                 }
2273
2274                 public static void GridView_postbackupdateitem (Page p)
2275                 {
2276                         if (!p.IsPostBack)
2277                                 DataObject.Reset ();
2278
2279                         GridView grid = new GridView ();
2280                         ObjectDataSource ds = new ObjectDataSource ();
2281
2282                         ds.ID = "ObjectDataSource2";
2283                         ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataObject";
2284                         ds.SelectMethod = "Select";
2285                         ds.DeleteMethod = "Delete";
2286                         ds.InsertMethod = "Insert";
2287                         ds.UpdateMethod = "Update";
2288
2289                         Parameter p1 = new Parameter ("ID", TypeCode.String);
2290                         Parameter p2 = new Parameter ("FName", TypeCode.String);
2291                         Parameter p3 = new Parameter ("LName", TypeCode.String);
2292
2293                         ds.UpdateParameters.Add (p1);
2294                         ds.UpdateParameters.Add (p2);
2295                         ds.UpdateParameters.Add (p3);
2296
2297                         grid.ID = "Grid";
2298                         grid.AutoGenerateEditButton = true;
2299                         
2300                         grid.AutoGenerateColumns = false;
2301                         
2302                         BoundField field = new BoundField ();
2303                         field.DataField = "ID";
2304                         grid.Columns.Add (field);
2305
2306                         field = new BoundField ();
2307                         field.DataField = "FName";
2308                         grid.Columns.Add (field);
2309
2310                         field = new BoundField ();
2311                         field.DataField = "LName";
2312                         grid.Columns.Add (field);
2313
2314                         grid.DataSourceID = "ObjectDataSource2";
2315                         p.Form.Controls.Add (ds);
2316                         p.Form.Controls.Add (grid);
2317                 }
2318
2319                 public static void GridView_checkrowsupdate (Page p)
2320                 {
2321                         GridView grid = p.FindControl ("Grid") as GridView;
2322                         if (grid == null)
2323                                 Assert.Fail ("Gridview does not been created");
2324
2325                         string[] data = new string[7];
2326                         try {
2327                                 data[0] = grid.Rows[0].Cells[0].Controls[0].UniqueID;
2328                         } catch (Exception e) {
2329                                 Assert.Fail ("Update button not been created" + e.Message);
2330                         }
2331                         
2332                         data[1] = grid.Rows[0].Cells[1].Text;
2333                         data[2] = grid.Rows[0].Cells[2].Text;
2334                         data[3] = grid.Rows[0].Cells[3].Text;
2335
2336                         if (grid.Rows[0].Cells[1].Controls.Count > 0) {
2337                                 data[4] = grid.Rows[0].Cells[1].Controls[0].UniqueID;
2338                                 data[5] = grid.Rows[0].Cells[2].Controls[0].UniqueID;
2339                                 data[6] = grid.Rows[0].Cells[3].Controls[0].UniqueID;
2340                         }
2341
2342                         WebTest.CurrentTest.UserData = data;
2343                 }
2344
2345                 [Test]
2346                 [Category ("NunitWeb")]
2347                 public void GridView_PostBackEdit ()
2348                 {
2349                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (GridView_postback));
2350                         string pageHTML = t.Run ();
2351                         Assert.AreEqual (-1, pageHTML.IndexOf ("EditSuccess"), "BeforeEdit");
2352                         FormRequest fr = new FormRequest (t.Response, "form1");
2353                         fr.Controls.Add ("__EVENTTARGET");
2354                         fr.Controls.Add ("__EVENTARGUMENT");
2355                         fr.Controls["__EVENTTARGET"].Value = "mygrid";
2356                         fr.Controls["__EVENTARGUMENT"].Value = "Edit$0";
2357                         t.Request = fr;
2358                         t.Invoker = PageInvoker.CreateOnLoad (GridView_postback);
2359                         pageHTML = t.Run ();
2360                         if (pageHTML.IndexOf ("EditSuccess") < 0)
2361                                 Assert.Fail ("EditFail");
2362                 }
2363
2364                 public void GridView_postback (Page p)
2365                 {
2366                         PokerGridView b = new PokerGridView ();
2367                         b.ID = "mygrid";
2368                         b.PageIndexChanging += new GridViewPageEventHandler (b_PageIndexChanging);
2369                         b.Sorting += new GridViewSortEventHandler (b_Sorting);
2370                         b.RowDeleting += new GridViewDeleteEventHandler (b_RowDeleting);
2371                         b.RowEditing += new GridViewEditEventHandler (b_RowEditing);
2372                         
2373                         ArrayList myds = new ArrayList ();
2374                         myds.Add ("Norway");
2375                         myds.Add ("Sweden");
2376                         myds.Add ("France");
2377                         myds.Add ("Italy");
2378
2379                         p.Form.Controls.Add (b);
2380                         b.AllowPaging = true;
2381                         b.PageSize = 2;
2382                         b.AllowSorting = true;
2383
2384                         b.AutoGenerateDeleteButton = true;
2385                         b.AutoGenerateEditButton = true;
2386                         b.AutoGenerateSelectButton = true;
2387
2388                         b.DataSource = myds;
2389                         b.DataBind ();
2390                 }
2391
2392
2393
2394                 public void b_RowEditing (object o, GridViewEditEventArgs e)
2395                 {
2396                         ((GridView) o).Page.Controls.Add (new LiteralControl ("EditSuccess"));
2397                         Assert.AreEqual (false, e.Cancel, "EditCancel");
2398                         Assert.AreEqual (0, e.NewEditIndex, "NewEditIndex");
2399                 }
2400
2401                 public void b_PageIndexChanging (object o, GridViewPageEventArgs e)
2402                 {
2403                         ((GridView) o).Page.Controls.Add (new LiteralControl ("PagingSuccess"));
2404                         Assert.AreEqual(false,e.Cancel,"Cancel");
2405                 }
2406
2407                 public void b_Sorting (object o, GridViewSortEventArgs e)
2408                 {
2409                         ((GridView) o).Page.Controls.Add (new LiteralControl ("SortingSuccess"));
2410                 }
2411
2412                 public void b_RowDeleting (object o, GridViewDeleteEventArgs e)
2413                 {
2414                         ((GridView) o).Page.Controls.Add (new LiteralControl ("DeleteSuccess"));
2415                 }
2416
2417                 public void b_SelectedIndexChanging (object o, GridViewSelectEventArgs e)
2418                 {
2419                         ((GridView) o).Page.Controls.Add (new LiteralControl ("SelectSuccess"));
2420                 }
2421
2422
2423                 //////// Post back events /////////////
2424                 [Test]
2425                 [Category ("NunitWeb")]
2426                 public void GridView_PostBackRowEvents ()
2427                 {
2428                         WebTest t = new WebTest ("NoEventValidation.aspx");
2429                         t.UserData = new Hashtable ();
2430                         t.Invoker = PageInvoker.CreateOnInit (new PageDelegate (_PostBackRowEvents));
2431                         string html = t.Run ();
2432
2433                         // Check if events done
2434                         CustomEventAssert(t,"RowCreated");
2435                         CustomEventAssert (t,"RowDataBound");
2436                         
2437                         // Remove grid to edit mode (Edit button pressed)                       
2438                         FormRequest fr = new FormRequest (t.Response, "form1");
2439                         fr.Controls.Add ("__EVENTTARGET");
2440                         fr.Controls.Add ("__EVENTARGUMENT");
2441                         fr.Controls["__EVENTTARGET"].Value = "Grid";
2442                         fr.Controls["__EVENTARGUMENT"].Value = "Edit$0";
2443                         t.Request = fr;
2444                         t.UserData = new Hashtable ();
2445                         html = t.Run ();
2446
2447                         // Check if events done
2448                         CustomEventAssert (t,"RowCreated");
2449                         CustomEventAssert (t,"RowCommand");
2450                         CustomEventAssert (t,"RowEditing");
2451                         CustomEventAssert (t,"RowDataBound");
2452
2453                         // Cancel button pressed
2454                         fr = new FormRequest (t.Response, "form1");
2455                         fr.Controls.Add ("__EVENTTARGET");
2456                         fr.Controls.Add ("__EVENTARGUMENT");
2457                         fr.Controls["__EVENTTARGET"].Value = "Grid";
2458                         fr.Controls["__EVENTARGUMENT"].Value = "Cancel$0";
2459                         t.Request = fr;
2460                         t.UserData = new Hashtable ();
2461                         html = t.Run ();
2462
2463                         // Check if events done
2464                         CustomEventAssert (t,"RowCreated");
2465                         CustomEventAssert (t,"RowCommand");
2466                         CustomEventAssert (t,"RowCancelingEdit");
2467                         CustomEventAssert (t,"RowDataBound");
2468                 }
2469
2470                 [Test]
2471                 [Category ("NunitWeb")]
2472                 public void GridView_PostBackUpdateEvents ()
2473                 {
2474                         WebTest t = new WebTest ("NoEventValidation.aspx");
2475                         t.UserData = new Hashtable ();
2476                         t.Invoker = PageInvoker.CreateOnInit (new PageDelegate (_PostBackRowEvents));
2477                         string html = t.Run ();
2478
2479                         // Remove grid to edit mode (Edit button pressed)                       
2480                         FormRequest fr = new FormRequest (t.Response, "form1");
2481                         fr.Controls.Add ("__EVENTTARGET");
2482                         fr.Controls.Add ("__EVENTARGUMENT");
2483                         fr.Controls["__EVENTTARGET"].Value = "Grid";
2484                         fr.Controls["__EVENTARGUMENT"].Value = "Edit$0";
2485                         t.Request = fr;
2486                         html = t.Run ();
2487
2488                         // Update button pressed
2489                         fr = new FormRequest (t.Response, "form1");
2490                         fr.Controls.Add ("__EVENTTARGET");
2491                         fr.Controls.Add ("__EVENTARGUMENT");
2492 #if DOT_NET
2493                         fr.Controls.Add ("Grid$ctl02$ctl02");
2494                         fr.Controls.Add ("Grid$ctl02$ctl03");
2495                         fr.Controls.Add ("Grid$ctl02$ctl04");
2496 #else
2497                         fr.Controls.Add ("Grid$ctl02$ctl03");
2498                         fr.Controls.Add ("Grid$ctl02$ctl04");
2499                         fr.Controls.Add ("Grid$ctl02$ctl05");
2500 #endif
2501                         fr.Controls["__EVENTTARGET"].Value = "Grid$ctl02$ctl00";
2502                         fr.Controls["__EVENTARGUMENT"].Value = "";
2503 #if DOT_NET
2504                         fr.Controls["Grid$ctl02$ctl02"].Value = "1001";
2505                         fr.Controls["Grid$ctl02$ctl03"].Value = "Mahesh";
2506                         fr.Controls["Grid$ctl02$ctl04"].Value = "Chand";
2507 #else
2508                         fr.Controls ["Grid$ctl02$ctl03"].Value = "1001";
2509                         fr.Controls ["Grid$ctl02$ctl04"].Value = "Mahesh";
2510                         fr.Controls ["Grid$ctl02$ctl05"].Value = "Chand";
2511 #endif
2512
2513                         t.Request = fr;
2514                         t.UserData = new Hashtable ();
2515                         html = t.Run ();
2516
2517                         // Check if events done
2518                         CustomEventAssert (t, "RowCreated");
2519                         CustomEventAssert (t, "RowCommand");
2520                         CustomEventAssert (t, "RowUpdating");
2521                         CustomEventAssert (t, "RowUpdated");
2522                         CustomEventAssert (t, "RowDataBound");
2523                 }
2524
2525                 [Test]
2526                 [Category ("NunitWeb")]
2527                 public void GridView_PostBackPagingEvents ()
2528                 {
2529                         WebTest t = new WebTest ("NoEventValidation.aspx");
2530                         t.UserData = new Hashtable ();
2531                         t.Invoker = PageInvoker.CreateOnInit (new PageDelegate (_PostBackPagingEvents));
2532                         string html = t.Run ();
2533
2534                         // Move to page 2
2535                         FormRequest fr = new FormRequest (t.Response, "form1");
2536                         fr.Controls.Add ("__EVENTTARGET");
2537                         fr.Controls.Add ("__EVENTARGUMENT");
2538                         fr.Controls["__EVENTTARGET"].Value = "Grid";
2539                         fr.Controls["__EVENTARGUMENT"].Value = "Page$2";
2540                         t.Request = fr;
2541                         html = t.Run ();
2542
2543                         // Check if events done
2544                         CustomEventAssert (t, "PageIndexChanging");
2545                         CustomEventAssert (t, "PageIndexChanged");
2546                 }
2547
2548                 [Test]
2549                 [Category ("NunitWeb")]
2550                 public void GridView_PostBackSortingEvents ()
2551                 {
2552                         WebTest t = new WebTest ("NoEventValidation.aspx");
2553                         t.UserData = new Hashtable ();
2554                         t.Invoker = PageInvoker.CreateOnInit (new PageDelegate (_PostBackSortingEvents));
2555                         string html = t.Run ();
2556
2557                         // Sort by ID
2558                         FormRequest fr = new FormRequest (t.Response, "form1");
2559                         fr.Controls.Add ("__EVENTTARGET");
2560                         fr.Controls.Add ("__EVENTARGUMENT");
2561                         fr.Controls["__EVENTTARGET"].Value = "Grid";
2562                         fr.Controls["__EVENTARGUMENT"].Value = "Sort$ID";
2563                         t.Request = fr;
2564                         html = t.Run ();
2565
2566                         // Check if events done
2567                         CustomEventAssert (t, "Sorting");
2568                         CustomEventAssert (t, "Sorted");
2569                 }
2570
2571                 [Test]
2572                 [Category ("NunitWeb")]
2573                 public void GridView_PostBackSelectingEvents ()
2574                 {
2575                         WebTest t = new WebTest ("NoEventValidation.aspx");
2576                         t.UserData = new Hashtable ();
2577                         t.Invoker = PageInvoker.CreateOnInit (new PageDelegate (_PostBackSelectingEvents));
2578                         string html = t.Run ();
2579
2580                         // Select
2581                         FormRequest fr = new FormRequest (t.Response, "form1");
2582                         fr.Controls.Add ("__EVENTTARGET");
2583                         fr.Controls.Add ("__EVENTARGUMENT");
2584                         fr.Controls["__EVENTTARGET"].Value = "Grid";
2585                         fr.Controls["__EVENTARGUMENT"].Value = "Select$0";
2586                         t.Request = fr;
2587                         html = t.Run ();
2588
2589                         // Check if events done
2590                         CustomEventAssert (t, "SelectedIndexChanging");
2591                         CustomEventAssert (t, "SelectedIndexChanged");
2592                 }
2593
2594                 #region PostBackEvents_helpers
2595                 
2596                 private void CustomEventAssert (WebTest t, string c)
2597                 {
2598                         Hashtable local = t.UserData as Hashtable;
2599                         if (local == null)
2600                                 Assert.Fail ("User data not created");
2601                         if(!local.ContainsValue(c))
2602                                 Assert.Fail (c + " not fired!"); 
2603                 }
2604
2605                 public static void _PostBackSelectingEvents (Page p)
2606                 {
2607                         if (!p.IsPostBack)
2608                                 DataObjects.Reset ();
2609
2610                         GridView grid = new GridView ();
2611                         ObjectDataSource ds = new ObjectDataSource ();
2612                         grid.SelectedIndexChanged += new EventHandler (grid_SelectedIndexChanged);
2613                         grid.SelectedIndexChanging += new GridViewSelectEventHandler (grid_SelectedIndexChanging);
2614                         ds.ID = "ObjectDataSource2";
2615                         ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataObjects";
2616                         ds.SelectMethod = "Select";
2617                         ds.DeleteMethod = "Delete";
2618                         ds.InsertMethod = "Insert";
2619                         ds.UpdateMethod = "Update";
2620                         grid.ID = "Grid";
2621                         grid.AutoGenerateColumns = true;
2622                         grid.AutoGenerateSelectButton = true;
2623                         grid.DataSourceID = "ObjectDataSource2";
2624                         p.Form.Controls.Add (ds);
2625                         p.Form.Controls.Add (grid);
2626                 }
2627
2628                 public static void _PostBackSortingEvents (Page p)
2629                 {
2630                         if (!p.IsPostBack)
2631                                 DataObjects.Reset ();
2632
2633                         GridView grid = new GridView ();
2634                         ObjectDataSource ds = new ObjectDataSource ();
2635                         ds.ID = "ObjectDataSource2";
2636                         ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataObjects";
2637                         ds.SelectMethod = "Select";
2638                         ds.DeleteMethod = "Delete";
2639                         ds.InsertMethod = "Insert";
2640                         ds.UpdateMethod = "Update";
2641
2642                         grid.Sorted += new EventHandler (grid_Sorted);
2643                         grid.Sorting += new GridViewSortEventHandler (grid_Sorting);
2644                         grid.AllowSorting = true;
2645                         grid.ID = "Grid";
2646                         grid.AutoGenerateColumns = true;
2647                         
2648                         grid.DataSourceID = "ObjectDataSource2";
2649                         p.Form.Controls.Add (ds);
2650                         p.Form.Controls.Add (grid);
2651                 }
2652
2653                 
2654                 public static void _PostBackPagingEvents (Page p)
2655                 {
2656                         if (!p.IsPostBack)
2657                                 DataObjects.Reset ();
2658
2659                         GridView grid = new GridView ();
2660                         ObjectDataSource ds = new ObjectDataSource ();
2661                         ds.ID = "ObjectDataSource2";
2662                         ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataObjects";
2663                         ds.SelectMethod = "Select";
2664                         ds.DeleteMethod = "Delete";
2665                         ds.InsertMethod = "Insert";
2666                         ds.UpdateMethod = "Update";
2667
2668                         grid.PageIndexChanged += new EventHandler (grid_PageIndexChanged);
2669                         grid.PageIndexChanging += new GridViewPageEventHandler (grid_PageIndexChanging);
2670                         grid.AllowPaging = true;
2671                         grid.ID = "Grid";
2672                         grid.AutoGenerateColumns = false;
2673                         grid.PageSize = 1;
2674
2675                         BoundField field = new BoundField ();
2676                         field.DataField = "ID";
2677                         grid.Columns.Add (field);
2678
2679                         field = new BoundField ();
2680                         field.DataField = "FName";
2681                         grid.Columns.Add (field);
2682
2683                         field = new BoundField ();
2684                         field.DataField = "LName";
2685                         grid.Columns.Add (field);
2686
2687                         grid.DataSourceID = "ObjectDataSource2";
2688                         p.Form.Controls.Add (ds);
2689                         p.Form.Controls.Add (grid);
2690                 }
2691
2692                 public static void _PostBackRowEvents (Page p)
2693                 {
2694                         if (!p.IsPostBack)
2695                                 DataObject.Reset ();
2696
2697                         GridView grid = new GridView ();
2698                         ObjectDataSource ds = new ObjectDataSource ();
2699                         ds.ID = "ObjectDataSource2";
2700                         ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataObject";
2701                         ds.SelectMethod = "Select";
2702                         ds.DeleteMethod = "Delete";
2703                         ds.InsertMethod = "Insert";
2704                         ds.UpdateMethod = "Update";
2705
2706
2707                         grid.RowCancelingEdit += new GridViewCancelEditEventHandler (grid_RowCancelingEdit);
2708                         grid.RowCommand += new GridViewCommandEventHandler (grid_RowCommand);
2709                         grid.RowCreated += new GridViewRowEventHandler (grid_RowCreated);
2710                         grid.RowDataBound += new GridViewRowEventHandler (grid_RowDataBound);
2711                         grid.RowEditing += new GridViewEditEventHandler (grid__RowEditing);
2712                         grid.RowUpdating += new GridViewUpdateEventHandler (grid_RowUpdating);
2713                         grid.RowUpdated += new GridViewUpdatedEventHandler (grid_RowUpdated);
2714                         grid.PageIndexChanged += new EventHandler (grid_PageIndexChanged);
2715                         grid.PageIndexChanging += new GridViewPageEventHandler (grid_PageIndexChanging);
2716
2717                         Parameter p1 = new Parameter ("ID", TypeCode.String);
2718                         Parameter p2 = new Parameter ("FName", TypeCode.String);
2719                         Parameter p3 = new Parameter ("LName", TypeCode.String);
2720
2721                         ds.UpdateParameters.Add (p1);
2722                         ds.UpdateParameters.Add (p2);
2723                         ds.UpdateParameters.Add (p3);
2724
2725                         grid.ID = "Grid";
2726                         grid.AutoGenerateEditButton = true;
2727
2728                         grid.AutoGenerateColumns = false;
2729
2730                         BoundField field = new BoundField ();
2731                         field.DataField = "ID";
2732                         grid.Columns.Add (field);
2733
2734                         field = new BoundField ();
2735                         field.DataField = "FName";
2736                         grid.Columns.Add (field);
2737
2738                         field = new BoundField ();
2739                         field.DataField = "LName";
2740                         grid.Columns.Add (field);
2741
2742                         grid.DataSourceID = "ObjectDataSource2";
2743                         p.Form.Controls.Add (ds);
2744                         p.Form.Controls.Add (grid);
2745                 }
2746
2747                 static void grid_SelectedIndexChanging (object sender, GridViewSelectEventArgs e)
2748                 {
2749                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2750                         if (local != null)
2751                                 local.Add (local.Count, "SelectedIndexChanging");
2752                 }
2753
2754                 static void grid_SelectedIndexChanged (object sender, EventArgs e)
2755                 {
2756                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2757                         if (local != null)
2758                                 local.Add (local.Count, "SelectedIndexChanged");
2759                 }
2760
2761                 static void grid_PageIndexChanging (object sender, GridViewPageEventArgs e)
2762                 {
2763                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2764                         if (local != null)
2765                                 local.Add (local.Count, "PageIndexChanging");
2766                 }
2767
2768                 static void grid_PageIndexChanged (object sender, EventArgs e)
2769                 {
2770                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2771                         if (local != null)
2772                                 local.Add (local.Count, "PageIndexChanged");
2773                 }
2774
2775                 public static void grid_RowUpdated (object sender, GridViewUpdatedEventArgs e)
2776                 {
2777                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2778                         if (local != null)
2779                                 local.Add (local.Count, "RowUpdated");
2780                 }
2781
2782                 public static void grid_RowUpdating (object sender, GridViewUpdateEventArgs e)
2783                 {
2784                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2785                         if (local != null)
2786                                 local.Add (local.Count, "RowUpdating");
2787                 }
2788
2789                 public static void grid_RowEditing (object sender, GridViewEditEventArgs e)
2790                 {
2791                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2792                         if (local != null)
2793                                 local.Add (local.Count, "RowEditing");
2794                 }
2795
2796                 public static void grid_RowDataBound (object sender, GridViewRowEventArgs e)
2797                 {
2798                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2799                         if (local != null)
2800                                 local.Add (local.Count, "RowDataBound");
2801                 }
2802
2803                 public static void grid_RowCreated (object sender, GridViewRowEventArgs e)
2804                 {
2805                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2806                         if (local != null)
2807                                 local.Add (local.Count, "RowCreated");
2808                 }
2809
2810                 public static void grid_RowCommand (object sender, GridViewCommandEventArgs e)
2811                 {
2812                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2813                         if (local != null)
2814                                 local.Add (local.Count, "RowCommand");
2815                 }
2816
2817                 public static void grid_RowCancelingEdit (object sender, GridViewCancelEditEventArgs e)
2818                 {
2819                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2820                         if (local != null)
2821                                 local.Add (local.Count, "RowCancelingEdit");
2822                 }
2823
2824                 public static void grid__RowEditing (object sender, GridViewEditEventArgs e)
2825                 {
2826                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2827                         if (local != null)
2828                                 local.Add (local.Count, "RowEditing");
2829                 }
2830
2831                 static void grid_Sorting (object sender, GridViewSortEventArgs e)
2832                 {
2833                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2834                         if (local != null)
2835                                 local.Add (local.Count, "Sorting");
2836                 }
2837
2838                 static void grid_Sorted (object sender, EventArgs e)
2839                 {
2840                         Hashtable local = WebTest.CurrentTest.UserData as Hashtable;
2841                         if (local != null)
2842                                 local.Add (local.Count, "Sorted");
2843                 }
2844
2845                 #endregion
2846
2847                 /// <summary>
2848                 /// All possible exceptions what can be thrown 
2849                 /// </summary>
2850                 [Test]
2851                 [ExpectedException (typeof (InvalidOperationException))]
2852                 public void GridView_GetDefaultSelectedValue ()
2853                 {
2854                         PokerGridView g = new PokerGridView ();
2855                         object o = g.SelectedValue;
2856                 }
2857
2858                 [Test]
2859                 [Category ("NunitWeb")]
2860                 [Category ("NotDotNet")]
2861                 public void GridViewUpdate ()
2862                 {
2863                         WebTest t = new WebTest ("GridViewUpdate.aspx");
2864                         string pageHTML = HtmlDiff.GetControlFromPageHtml (t.Run ());
2865                         
2866                         FormRequest fr = new FormRequest (t.Response, "form1");
2867                         fr.Controls.Add ("__EVENTTARGET");
2868                         fr.Controls.Add ("__EVENTARGUMENT");
2869                         fr.Controls.Add ("GridView1$ctl02$Name"); // for .NET use "GridView1$ctl02$Name"
2870                         fr.Controls.Add ("GridView1$ctl03$Name");
2871                         fr.Controls ["__EVENTTARGET"].Value = "Button1";
2872                         fr.Controls ["__EVENTARGUMENT"].Value = "";
2873                         fr.Controls ["GridView1$ctl02$Name"].Value = "ABC";
2874                         fr.Controls ["GridView1$ctl03$Name"].Value = "123";
2875                         t.Request = fr;
2876                         t.Invoker = PageInvoker.CreateOnLoad (GridView_postback);
2877                         pageHTML = HtmlDiff.GetControlFromPageHtml (t.Run ());
2878                         #region original
2879                         string original = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"GridView1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">ID</th><th scope=\"col\">&nbsp;</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1</td><td>\n                        <input name=\"GridView1$ctl02$Name\" type=\"text\" value=\"ABC\" id=\"GridView1_ctl02_Name\" />\n                        <input type=\"button\" name=\"GridView1$ctl02$b1\" value=\"upd\" onclick=\"javascript:__doPostBack('GridView1$ctl02$b1','')\" id=\"GridView1_ctl02_b1\" />\n                    </td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>2</td><td>\n                        <input name=\"GridView1$ctl03$Name\" type=\"text\" value=\"123\" id=\"GridView1_ctl03_Name\" />\n                        <input type=\"button\" name=\"GridView1$ctl03$b1\" value=\"upd\" onclick=\"javascript:__doPostBack('GridView1$ctl03$b1','')\" id=\"GridView1_ctl03_b1\" />\n                    </td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
2880                         #endregion                      
2881                         HtmlDiff.AssertAreEqual (original, pageHTML, "GridViewUpdate #1");
2882
2883                         fr = new FormRequest (t.Response, "form1");
2884                         fr.Controls.Add ("__EVENTTARGET");
2885                         fr.Controls.Add ("__EVENTARGUMENT");
2886                         fr.Controls.Add ("GridView1$ctl02$Name");
2887                         fr.Controls.Add ("GridView1$ctl03$Name");
2888                         fr.Controls ["__EVENTTARGET"].Value = "GridView1$ctl02$b1";
2889                         fr.Controls ["__EVENTARGUMENT"].Value = "";
2890                         fr.Controls ["GridView1$ctl02$Name"].Value = "ABC";
2891                         fr.Controls ["GridView1$ctl03$Name"].Value = "123";
2892                         t.Request = fr;
2893                         t.Invoker = PageInvoker.CreateOnLoad (GridView_postback);
2894                         pageHTML = HtmlDiff.GetControlFromPageHtml (t.Run ());
2895                         #region original
2896                         original = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"GridView1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">ID</th><th scope=\"col\">&nbsp;</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1</td><td>\n                        <input name=\"GridView1$ctl02$Name\" type=\"text\" value=\"ABC\" id=\"GridView1_ctl02_Name\" />\n                        <input type=\"button\" name=\"GridView1$ctl02$b1\" value=\"upd\" onclick=\"javascript:__doPostBack('GridView1$ctl02$b1','')\" id=\"GridView1_ctl02_b1\" />\n                    </td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>2</td><td>\n                        <input name=\"GridView1$ctl03$Name\" type=\"text\" value=\"heh2\" id=\"GridView1_ctl03_Name\" />\n                        <input type=\"button\" name=\"GridView1$ctl03$b1\" value=\"upd\" onclick=\"javascript:__doPostBack('GridView1$ctl03$b1','')\" id=\"GridView1_ctl03_b1\" />\n                    </td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
2897                         #endregion
2898                         HtmlDiff.AssertAreEqual (original, pageHTML, "GridViewUpdate #2");
2899
2900                         fr = new FormRequest (t.Response, "form1");
2901                         fr.Controls.Add ("__EVENTTARGET");
2902                         fr.Controls.Add ("__EVENTARGUMENT");
2903                         fr.Controls.Add ("GridView1$ctl02$Name");
2904                         fr.Controls.Add ("GridView1$ctl03$Name");
2905                         fr.Controls ["__EVENTTARGET"].Value = "GridView1$ctl03$b1";
2906                         fr.Controls ["__EVENTARGUMENT"].Value = "";
2907                         fr.Controls ["GridView1$ctl02$Name"].Value = "ABC";
2908                         fr.Controls ["GridView1$ctl03$Name"].Value = "123";
2909                         t.Request = fr;
2910                         t.Invoker = PageInvoker.CreateOnLoad (GridView_postback);
2911                         pageHTML = HtmlDiff.GetControlFromPageHtml (t.Run ());
2912                         #region original
2913                         original = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"GridView1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">ID</th><th scope=\"col\">&nbsp;</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1</td><td>\n                        <input name=\"GridView1$ctl02$Name\" type=\"text\" value=\"ABC\" id=\"GridView1_ctl02_Name\" />\n                        <input type=\"button\" name=\"GridView1$ctl02$b1\" value=\"upd\" onclick=\"javascript:__doPostBack('GridView1$ctl02$b1','')\" id=\"GridView1_ctl02_b1\" />\n                    </td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>2</td><td>\n                        <input name=\"GridView1$ctl03$Name\" type=\"text\" value=\"123\" id=\"GridView1_ctl03_Name\" />\n                        <input type=\"button\" name=\"GridView1$ctl03$b1\" value=\"upd\" onclick=\"javascript:__doPostBack('GridView1$ctl03$b1','')\" id=\"GridView1_ctl03_b1\" />\n                    </td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
2914                         #endregion
2915                         HtmlDiff.AssertAreEqual (original, pageHTML, "GridViewUpdate #3");
2916                 }
2917
2918                 [Test]
2919                 [Category ("NunitWeb")]
2920                 public void GridView_RequiresDataBinding ()
2921                 {
2922                         PageDelegates delegates = new PageDelegates ();
2923                         delegates.LoadComplete = GridView_RequiresDataBinding_LoadComplete;
2924                         PageInvoker invoker = new PageInvoker (delegates);
2925                         WebTest t = new WebTest (invoker);
2926                         t.Run ();
2927                 }
2928
2929                 public static void GridView_RequiresDataBinding_LoadComplete (Page p)
2930                 {
2931                         PokerGridView grid = new PokerGridView ();
2932                         p.Form.Controls.Add (grid);
2933
2934                         grid.DataSource = new string [] { "A", "B", "C" };
2935                         grid.DataBind ();
2936
2937                         Assert.AreEqual (false, grid.GetRequiresDataBinding ());
2938
2939                         grid.EmptyDataTemplate = new CompiledTemplateBuilder (BuildTemplateMethod);
2940                         Assert.AreEqual (false, grid.GetRequiresDataBinding (), "EmptyDataTemplate was set");
2941
2942                         grid.PagerTemplate = new CompiledTemplateBuilder (BuildTemplateMethod);
2943                         Assert.AreEqual (false, grid.GetRequiresDataBinding (), "PagerTemplate was set");
2944                 }
2945
2946                 public static void BuildTemplateMethod (Control c)
2947                 {
2948                 }
2949
2950                 [Test]
2951                 [Category ("NunitWeb")]
2952                 public void GridView_Pager ()
2953                 {
2954                         PageDelegates delegates = new PageDelegates ();
2955                         delegates.Load = GridView_Pager_Load;
2956                         PageInvoker invoker = new PageInvoker (delegates);
2957                         WebTest t = new WebTest (invoker);
2958                         string html = t.Run ();
2959                 }
2960
2961                 public static void GridView_Pager_Load (Page p)
2962                 {
2963                         // TopAndBottom, PageCount = 1
2964                         PokerGridView grid = new PokerGridView ();
2965                         grid.PagerSettings.Position = PagerPosition.TopAndBottom;
2966                         grid.AllowPaging = true;
2967                         p.Form.Controls.Add (grid);
2968
2969                         grid.DataSource = new string [] { "A", "B", "C" };
2970                         grid.DataBind ();
2971
2972                         Assert.AreEqual (1, grid.PageCount, "#1#PageCount");
2973
2974                         Assert.IsNotNull (grid.TopPagerRow, "#1#TopPagerRow");
2975                         Assert.AreEqual (false, grid.TopPagerRow.Visible, "#1#TopPagerRow.Visible");
2976
2977                         Assert.IsNotNull (grid.BottomPagerRow, "#1#BottomPagerRow");
2978                         Assert.AreEqual (false, grid.BottomPagerRow.Visible, "#1#BottomPagerRow.Visible");
2979
2980                         // Top, PageCount = 1
2981                         grid = new PokerGridView ();
2982                         grid.PagerSettings.Position = PagerPosition.Top;
2983                         grid.AllowPaging = true;
2984                         p.Form.Controls.Add (grid);
2985
2986                         grid.DataSource = new string [] { "A", "B", "C" };
2987                         grid.DataBind ();
2988
2989                         Assert.AreEqual (1, grid.PageCount, "#2#PageCount");
2990
2991                         Assert.IsNotNull (grid.TopPagerRow, "#2#TopPagerRow");
2992                         Assert.AreEqual (false, grid.TopPagerRow.Visible, "#2#TopPagerRow.Visible");
2993
2994                         Assert.IsNull (grid.BottomPagerRow, "#2#BottomPagerRow");
2995
2996                         // Bottom, PageCount = 1
2997                         grid = new PokerGridView ();
2998                         grid.PagerSettings.Position = PagerPosition.Bottom;
2999                         grid.AllowPaging = true;
3000                         p.Form.Controls.Add (grid);
3001
3002                         grid.DataSource = new string [] { "A", "B", "C" };
3003                         grid.DataBind ();
3004
3005                         Assert.AreEqual (1, grid.PageCount, "#3#PageCount");
3006
3007                         Assert.IsNull (grid.TopPagerRow, "#3#TopPagerRow");
3008
3009                         Assert.IsNotNull (grid.BottomPagerRow, "#3#BottomPagerRow");
3010                         Assert.AreEqual (false, grid.BottomPagerRow.Visible, "#3#BottomPagerRow.Visible");
3011
3012                         // PagerSettings.Visible = false, PageCount = 2
3013                         grid = new PokerGridView ();
3014                         grid.PagerSettings.Position = PagerPosition.TopAndBottom;
3015                         grid.PagerSettings.Visible = false;
3016                         grid.AllowPaging = true;
3017                         grid.PageSize = 2;
3018                         p.Form.Controls.Add (grid);
3019
3020                         grid.DataSource = new string [] { "A", "B", "C" };
3021                         grid.DataBind ();
3022
3023                         Assert.AreEqual (2, grid.PageCount, "#3#PageCount");
3024
3025                         Assert.IsNull (grid.TopPagerRow, "#3#TopPagerRow");
3026                         Assert.IsNull (grid.BottomPagerRow, "#3#BottomPagerRow");
3027                 }
3028
3029                 [TestFixtureTearDown]
3030                 public void TearDown()
3031                 {
3032                         WebTest.Unload();
3033                 }
3034
3035                 public static DataTable CreateDataSource ()
3036                 {
3037                         DataTable aTable = new DataTable ("A");
3038                         DataColumn dtCol;
3039                         DataRow dtRow;
3040                         // Create ID column and add to the DataTable.
3041                         dtCol = new DataColumn ();
3042                         dtCol.DataType = Type.GetType ("System.Boolean");
3043                         dtCol.ColumnName = BOOLFIELD;
3044                         dtCol.Caption = BOOLFIELD;
3045                         dtCol.ReadOnly = true;
3046
3047                         // Add the column to the DataColumnCollection.
3048                         aTable.Columns.Add (dtCol);
3049                         
3050                         dtCol = new DataColumn ();
3051                         dtCol.DataType = Type.GetType ("System.String");
3052                         dtCol.ColumnName = STRINGFIELD;
3053                         dtCol.Caption = STRINGFIELD;
3054                         dtCol.ReadOnly = true;
3055
3056                         // Add the column to the DataColumnCollection.
3057                         aTable.Columns.Add (dtCol);
3058
3059                         // Create 2 rows to the table
3060                         dtRow = aTable.NewRow ();
3061                         dtRow[BOOLFIELD] = true;
3062                         dtRow[STRINGFIELD] = "1";
3063                         aTable.Rows.Add (dtRow);
3064
3065                         dtRow = aTable.NewRow ();
3066                         dtRow[BOOLFIELD] = false;
3067                         dtRow[STRINGFIELD] = "2";
3068                         aTable.Rows.Add (dtRow);
3069                         return aTable;
3070                 }
3071
3072                 // A simple Template class to wrap an image.
3073                 public class ImageTemplate : ITemplate
3074                 {
3075                         private MyWebControl.Image myImage;
3076                         public MyWebControl.Image MyImage
3077                         {
3078                                 get
3079                                 {
3080                                         return myImage;
3081                                 }
3082                                 set
3083                                 {
3084                                         myImage = value;
3085                                 }
3086                         }
3087                         public void InstantiateIn (Control container)
3088                         {
3089                                 container.Controls.Add (MyImage);
3090                         }
3091                 }
3092         }
3093
3094         public class DataObject
3095         {
3096                 public static DataTable ds = CreateDataTable ();
3097                 public static DataTable Select ()
3098                 {
3099                         return ds;
3100                 }
3101
3102                 public static void Reset ()
3103                 {
3104                         ds = CreateDataTable ();
3105                 }
3106
3107                 public static DataTable Delete (string ID, string FName, string LName)
3108                 {
3109                         DataRow dr = ds.Rows.Find (ID);
3110                         if (dr != null)
3111                                 ds.Rows.Remove (dr);
3112                         return ds;
3113                 }
3114
3115                 public static DataTable Insert (string ID, string FName, string LName)
3116                 {
3117                         DataRow dr = ds.NewRow ();
3118                         dr["ID"] = ID;
3119                         dr["FName"] = FName;
3120                         dr["LName"] = LName;
3121                         ds.Rows.Add (dr);
3122                         return ds;
3123                 }
3124
3125                 public static DataTable Update (string ID, string FName, string LName)
3126                 {
3127                         foreach (DataRow row in ds.Rows) {
3128                                 if (row["ID"].ToString () == ID) {
3129                                         row["FName"] = FName;
3130                                         row["LName"] = LName;
3131                                 }
3132                         }
3133                         return ds;
3134                 }
3135
3136                 public static DataTable CreateDataTable ()
3137                 {
3138                         DataTable aTable = new DataTable ("A");
3139                         DataColumn dtCol;
3140                         DataRow dtRow;
3141
3142                         // Create ID column and add to the DataTable.
3143                         dtCol = new DataColumn ();
3144                         dtCol.DataType = Type.GetType ("System.Int32");
3145                         dtCol.ColumnName = "ID";
3146                         dtCol.AutoIncrement = true;
3147                         dtCol.Caption = "ID";
3148                         dtCol.ReadOnly = true;
3149                         dtCol.Unique = true;
3150                         aTable.Columns.Add (dtCol);
3151
3152                         // Create Name column and add to the table
3153                         dtCol = new DataColumn ();
3154                         dtCol.DataType = Type.GetType ("System.String");
3155                         dtCol.ColumnName = "FName";
3156                         dtCol.AutoIncrement = false;
3157                         dtCol.Caption = "First Name";
3158                         dtCol.ReadOnly = false;
3159                         dtCol.Unique = false;
3160                         aTable.Columns.Add (dtCol);
3161
3162                         // Create Last Name column and add to the table.
3163                         dtCol = new DataColumn ();
3164                         dtCol.DataType = Type.GetType ("System.String");
3165                         dtCol.ColumnName = "LName";
3166                         dtCol.AutoIncrement = false;
3167                         dtCol.Caption = "Last Name";
3168                         dtCol.ReadOnly = false;
3169                         dtCol.Unique = false;
3170                         aTable.Columns.Add (dtCol);
3171
3172                         // Create three rows to the table
3173                         dtRow = aTable.NewRow ();
3174                         dtRow["ID"] = 1001;
3175                         dtRow["FName"] = "Mahesh";
3176                         dtRow["LName"] = "Chand";
3177                         aTable.Rows.Add (dtRow);
3178
3179                         aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] };
3180                         return aTable;
3181                 }
3182         }
3183
3184         public class DataObjects
3185         {
3186                 public static DataTable ds = CreateDataTable ();
3187                 public static DataTable Select ()
3188                 {
3189                         return ds;
3190                 }
3191
3192                 public static void Reset ()
3193                 {
3194                         ds = CreateDataTable ();
3195                 }
3196
3197                 public static DataTable Delete (string ID, string FName, string LName)
3198                 {
3199                         DataRow dr = ds.Rows.Find (ID);
3200                         if (dr != null)
3201                                 ds.Rows.Remove (dr);
3202                         return ds;
3203                 }
3204
3205                 public static DataTable Insert (string ID, string FName, string LName)
3206                 {
3207                         DataRow dr = ds.NewRow ();
3208                         dr["ID"] = ID;
3209                         dr["FName"] = FName;
3210                         dr["LName"] = LName;
3211                         ds.Rows.Add (dr);
3212                         return ds;
3213                 }
3214
3215                 public static DataTable Update (string ID, string FName, string LName)
3216                 {
3217                         foreach (DataRow row in ds.Rows) {
3218                                 if (row["ID"].ToString () == ID) {
3219                                         row["FName"] = FName;
3220                                         row["LName"] = LName;
3221                                 }
3222                         }
3223                         return ds;
3224                 }
3225
3226                 public static DataTable CreateDataTable ()
3227                 {
3228                         DataTable aTable = new DataTable ("A");
3229                         DataColumn dtCol;
3230                         DataRow dtRow;
3231
3232                         // Create ID column and add to the DataTable.
3233                         dtCol = new DataColumn ();
3234                         dtCol.DataType = Type.GetType ("System.Int32");
3235                         dtCol.ColumnName = "ID";
3236                         dtCol.AutoIncrement = true;
3237                         dtCol.Caption = "ID";
3238                         dtCol.ReadOnly = true;
3239                         dtCol.Unique = true;
3240                         aTable.Columns.Add (dtCol);
3241
3242                         // Create Name column and add to the table
3243                         dtCol = new DataColumn ();
3244                         dtCol.DataType = Type.GetType ("System.String");
3245                         dtCol.ColumnName = "FName";
3246                         dtCol.AutoIncrement = false;
3247                         dtCol.Caption = "First Name";
3248                         dtCol.ReadOnly = false;
3249                         dtCol.Unique = false;
3250                         aTable.Columns.Add (dtCol);
3251
3252                         // Create Last Name column and add to the table.
3253                         dtCol = new DataColumn ();
3254                         dtCol.DataType = Type.GetType ("System.String");
3255                         dtCol.ColumnName = "LName";
3256                         dtCol.AutoIncrement = false;
3257                         dtCol.Caption = "Last Name";
3258                         dtCol.ReadOnly = false;
3259                         dtCol.Unique = false;
3260                         aTable.Columns.Add (dtCol);
3261
3262                         // Create three rows to the table
3263                         dtRow = aTable.NewRow ();
3264                         dtRow["ID"] = 1001;
3265                         dtRow["FName"] = "Mahesh";
3266                         dtRow["LName"] = "Chand";
3267                         aTable.Rows.Add (dtRow);
3268
3269                         dtRow = aTable.NewRow ();
3270                         dtRow["ID"] = 1002;
3271                         dtRow["FName"] = "Vadim";
3272                         dtRow["LName"] = "Popik";
3273                         aTable.Rows.Add (dtRow);
3274
3275                         aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] };
3276                         return aTable;
3277                 }
3278         }
3279 }
3280