1 // 2 // Tests for System.Web.UI.WebControls.DataGrid.cs 3 // 4 // Author: 5 // Jackson Harper (jackson@ximian.com) 6 // Gonzalo Paniagua Javier (gonzalo@ximian.com) 7 // 8 // 9 // Copyright (C) 2005 Novell, Inc (http://www.novell.com) 10 // 11 // Permission is hereby granted, free of charge, to any person obtaining 12 // a copy of this software and associated documentation files (the 13 // "Software"), to deal in the Software without restriction, including 14 // without limitation the rights to use, copy, modify, merge, publish, 15 // distribute, sublicense, and/or sell copies of the Software, and to 16 // permit persons to whom the Software is furnished to do so, subject to 17 // the following conditions: 18 // 19 // The above copyright notice and this permission notice shall be 20 // included in all copies or substantial portions of the Software. 21 // 22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 29 // 30 31 using NUnit.Framework; 32 using AttributeCollection = System.ComponentModel.AttributeCollection; 33 using System; 34 using System.Drawing; 35 using System.IO; 36 using System.Globalization; 37 using System.Web; 38 using System.Web.UI; 39 using System.Web.UI.WebControls; 40 using System.Collections; 41 using System.Data; 42 using System.ComponentModel; 43 using System.Diagnostics; 44 using System.Collections.Generic; 45 using MonoTests.SystemWeb.Framework; 46 using MonoTests.stand_alone.WebHarness; 47 48 namespace MonoTests.System.Web.UI.WebControls { 49 50 public class DataGridPoker : DataGrid { 51 DataGridPoker()52 public DataGridPoker () 53 { 54 TrackViewState (); 55 } 56 GetTagName()57 public string GetTagName () 58 { 59 return TagName; 60 } 61 PrepareCH()62 public void PrepareCH () 63 { 64 PrepareControlHierarchy (); 65 } 66 Render()67 public string Render () 68 { 69 StringWriter sw = new StringWriter (); 70 HtmlTextWriter tw = new HtmlTextWriter (sw); 71 72 Render (tw); 73 return sw.ToString (); 74 } 75 GetViewState()76 public StateBag GetViewState () 77 { 78 return ViewState; 79 } 80 ControlStyle()81 public new Style ControlStyle () 82 { 83 return CreateControlStyle (); 84 } 85 DoCancelCommand(DataGridCommandEventArgs e)86 public void DoCancelCommand (DataGridCommandEventArgs e) 87 { 88 OnCancelCommand (e); 89 } 90 DoDeleteCommand(DataGridCommandEventArgs e)91 public void DoDeleteCommand (DataGridCommandEventArgs e) 92 { 93 OnDeleteCommand (e); 94 } 95 DoEditCommand(DataGridCommandEventArgs e)96 public void DoEditCommand (DataGridCommandEventArgs e) 97 { 98 OnEditCommand (e); 99 } 100 DoItemCommand(DataGridCommandEventArgs e)101 public void DoItemCommand (DataGridCommandEventArgs e) 102 { 103 OnItemCommand (e); 104 } 105 DoUpdateCommand(DataGridCommandEventArgs e)106 public void DoUpdateCommand (DataGridCommandEventArgs e) 107 { 108 OnUpdateCommand (e); 109 } 110 DoItemCreated(DataGridItemEventArgs e)111 public void DoItemCreated (DataGridItemEventArgs e) 112 { 113 OnItemCreated (e); 114 } 115 DoItemDataBound(DataGridItemEventArgs e)116 public void DoItemDataBound (DataGridItemEventArgs e) 117 { 118 OnItemDataBound (e); 119 } 120 DoPageIndexChanged(DataGridPageChangedEventArgs e)121 public void DoPageIndexChanged (DataGridPageChangedEventArgs e) 122 { 123 OnPageIndexChanged (e); 124 } 125 DoSortCommand(DataGridSortCommandEventArgs e)126 public void DoSortCommand (DataGridSortCommandEventArgs e) 127 { 128 OnSortCommand (e); 129 } 130 DoBubbleEvent(object source, EventArgs e)131 public void DoBubbleEvent (object source, EventArgs e) 132 { 133 OnBubbleEvent (source, e); 134 } 135 TrackState()136 public void TrackState () 137 { 138 TrackViewState (); 139 } 140 SaveState()141 public object SaveState () 142 { 143 return SaveViewState (); 144 } 145 CreateColumns(PagedDataSource data_source, bool use_data_source)146 public ArrayList CreateColumns (PagedDataSource data_source, bool use_data_source) 147 { 148 return CreateColumnSet (data_source, use_data_source); 149 } 150 CreateControls(bool use_data_source)151 public void CreateControls (bool use_data_source) 152 { 153 CreateControlHierarchy (use_data_source); 154 } 155 InitPager(DataGridItem item, int columnSpan, PagedDataSource pagedDataSource)156 public void InitPager (DataGridItem item, int columnSpan, 157 PagedDataSource pagedDataSource) 158 { 159 InitializePager (item, columnSpan, pagedDataSource); 160 } 161 } 162 163 public class AmazingEnumerable : IEnumerable { 164 165 private IList list; 166 public int CallCount; 167 AmazingEnumerable(IList list)168 public AmazingEnumerable (IList list) 169 { 170 this.list = list; 171 } 172 GetEnumerator()173 public IEnumerator GetEnumerator () 174 { 175 CallCount++; 176 return list.GetEnumerator (); 177 } 178 179 } 180 181 [TestFixture] 182 public class DataGridTest { 183 184 [TestFixtureSetUp()] FixtureSetup()185 public void FixtureSetup () 186 { 187 WebTest.CopyResource (GetType (), "DataGrid.aspx", "DataGrid.aspx"); 188 } 189 190 [TestFixtureTearDown()] FixtureTearDown()191 public void FixtureTearDown () 192 { 193 WebTest.Unload (); 194 } 195 196 [Test] Defaults()197 public void Defaults () 198 { 199 DataGridPoker p = new DataGridPoker (); 200 201 Assert.AreEqual (DataGrid.CancelCommandName, "Cancel", "A1"); 202 Assert.AreEqual (DataGrid.DeleteCommandName, "Delete", "A2"); 203 Assert.AreEqual (DataGrid.EditCommandName, "Edit", "A3"); 204 Assert.AreEqual (DataGrid.NextPageCommandArgument, "Next", "A4"); 205 Assert.AreEqual (DataGrid.PageCommandName, "Page", "A5"); 206 Assert.AreEqual (DataGrid.PrevPageCommandArgument, "Prev", "A6"); 207 Assert.AreEqual (DataGrid.SelectCommandName, "Select", "A7"); 208 Assert.AreEqual (DataGrid.SortCommandName, "Sort", "A8"); 209 Assert.AreEqual (DataGrid.UpdateCommandName, "Update", "A9"); 210 211 Assert.AreEqual (p.AllowCustomPaging, false, "A10"); 212 Assert.AreEqual (p.AllowPaging, false, "A11"); 213 Assert.AreEqual (p.AllowSorting, false, "A12"); 214 Assert.AreEqual (p.AutoGenerateColumns, true, "A13"); 215 Assert.AreEqual (p.BackImageUrl, String.Empty, "A14"); 216 Assert.AreEqual (p.CurrentPageIndex, 0, "A15"); 217 Assert.AreEqual (p.EditItemIndex, -1, "A16"); 218 Assert.AreEqual (p.PageCount, 0, "A17"); 219 Assert.AreEqual (p.PageSize, 10, "A18"); 220 Assert.AreEqual (p.SelectedIndex, -1, "A19"); 221 Assert.AreEqual (p.SelectedItem, null, "A20"); 222 Assert.AreEqual (p.ShowFooter, false, "A21"); 223 Assert.AreEqual (p.ShowHeader, true, "A22"); 224 Assert.AreEqual (p.VirtualItemCount, 0, "A23"); 225 } 226 227 [Test] TagName()228 public void TagName () 229 { 230 DataGridPoker p = new DataGridPoker (); 231 Assert.AreEqual (p.GetTagName (), "table", "A1"); 232 } 233 234 [Test] 235 [ExpectedException (typeof (ArgumentNullException))] NullBackImage()236 public void NullBackImage () 237 { 238 DataGridPoker p = new DataGridPoker (); 239 240 p.BackImageUrl = null; 241 Assert.AreEqual (p.BackImageUrl, String.Empty, "A1"); 242 } 243 244 [Test] CleanProperties()245 public void CleanProperties () 246 { 247 DataGridPoker p = new DataGridPoker (); 248 249 p.AllowCustomPaging = true; 250 Assert.IsTrue (p.AllowCustomPaging, "A1"); 251 p.AllowCustomPaging = false; 252 Assert.IsFalse (p.AllowCustomPaging, "A2"); 253 254 p.AllowPaging = true; 255 Assert.IsTrue (p.AllowPaging, "A3"); 256 p.AllowPaging = false; 257 Assert.IsFalse (p.AllowPaging, "A4"); 258 259 p.AllowSorting = true; 260 Assert.IsTrue (p.AllowSorting, "A5"); 261 p.AllowSorting = false; 262 Assert.IsFalse (p.AllowSorting, "A6"); 263 264 p.AutoGenerateColumns = true; 265 Assert.IsTrue (p.AutoGenerateColumns, "A7"); 266 p.AutoGenerateColumns = false; 267 Assert.IsFalse (p.AutoGenerateColumns, "A8"); 268 269 p.BackImageUrl = "foobar"; 270 Assert.AreEqual (p.BackImageUrl, "foobar", "A9"); 271 272 p.CurrentPageIndex = 0; 273 Assert.AreEqual (p.CurrentPageIndex, 0, "A10"); 274 p.CurrentPageIndex = Int32.MaxValue; 275 Assert.AreEqual (p.CurrentPageIndex, Int32.MaxValue, "A11"); 276 277 p.EditItemIndex = 0; 278 Assert.AreEqual (p.EditItemIndex, 0, "A12"); 279 p.EditItemIndex = -1; 280 Assert.AreEqual (p.EditItemIndex, -1, "A13"); 281 p.EditItemIndex = Int32.MaxValue; 282 Assert.AreEqual (p.EditItemIndex, Int32.MaxValue, "A14"); 283 284 p.PageSize = 1; 285 Assert.AreEqual (p.PageSize, 1, "A15"); 286 p.PageSize = Int32.MaxValue; 287 288 p.SelectedIndex = 0; 289 Assert.AreEqual (p.SelectedIndex, 0, "A16"); 290 p.SelectedIndex = -1; 291 Assert.AreEqual (p.SelectedIndex, -1, "A17"); 292 p.SelectedIndex = Int32.MaxValue; 293 Assert.AreEqual (p.SelectedIndex, Int32.MaxValue, "A18"); 294 295 p.ShowFooter = true; 296 Assert.IsTrue (p.ShowFooter, "A19"); 297 p.ShowFooter = false; 298 Assert.IsFalse (p.ShowFooter, "A20"); 299 300 p.ShowHeader = true; 301 Assert.IsTrue (p.ShowHeader, "A21"); 302 p.ShowHeader = false; 303 Assert.IsFalse (p.ShowHeader, "A22"); 304 305 p.VirtualItemCount = 0; 306 Assert.AreEqual (p.VirtualItemCount, 0, "A23"); 307 p.VirtualItemCount = Int32.MaxValue; 308 Assert.AreEqual (p.VirtualItemCount, Int32.MaxValue, "A24"); 309 } 310 311 [Test] 312 [ExpectedException (typeof (ArgumentOutOfRangeException))] CurrentPageIndexTooLow()313 public void CurrentPageIndexTooLow () 314 { 315 DataGridPoker p = new DataGridPoker (); 316 p.CurrentPageIndex = -1; 317 } 318 319 [Test] 320 [ExpectedException (typeof (ArgumentOutOfRangeException))] EditItemIndexTooLow()321 public void EditItemIndexTooLow () 322 { 323 DataGridPoker p = new DataGridPoker (); 324 p.EditItemIndex = -2; 325 } 326 327 [Test] 328 [ExpectedException (typeof (ArgumentOutOfRangeException))] PageSizeTooLow()329 public void PageSizeTooLow () 330 { 331 DataGridPoker p = new DataGridPoker (); 332 p.PageSize = 0; 333 } 334 335 [Test] 336 [ExpectedException (typeof (ArgumentOutOfRangeException))] SelectedIndexTooLow()337 public void SelectedIndexTooLow () 338 { 339 DataGridPoker p = new DataGridPoker (); 340 p.SelectedIndex = -2; 341 } 342 343 [Test] 344 [ExpectedException (typeof (ArgumentOutOfRangeException))] VirtualItemCountTooLow()345 public void VirtualItemCountTooLow () 346 { 347 DataGridPoker p = new DataGridPoker (); 348 p.VirtualItemCount = -1; 349 } 350 351 [Test] ViewState()352 public void ViewState () 353 { 354 DataGridPoker p = new DataGridPoker (); 355 StateBag vs = p.GetViewState (); 356 357 Assert.AreEqual (vs.Count, 0, "A1"); 358 359 p.AllowCustomPaging = true; 360 Assert.AreEqual (vs.Count, 1, "A2"); 361 Assert.AreEqual (vs ["AllowCustomPaging"], true, "A3"); 362 p.AllowCustomPaging = false; 363 Assert.AreEqual (vs.Count, 1, "A4"); 364 Assert.AreEqual (vs ["AllowCustomPaging"], false, "A5"); 365 366 p.AllowPaging = true; 367 Assert.AreEqual (vs.Count, 2, "A6"); 368 Assert.AreEqual (vs ["AllowPaging"], true, "A7"); 369 p.AllowPaging = false; 370 Assert.AreEqual (vs.Count, 2, "A8"); 371 Assert.AreEqual (vs ["AllowPaging"], false, "A9"); 372 373 p.AllowSorting = true; 374 Assert.AreEqual (vs.Count, 3, "A10"); 375 Assert.AreEqual (vs ["AllowSorting"], true, "A11"); 376 p.AllowSorting = false; 377 Assert.AreEqual (vs.Count, 3, "A12"); 378 Assert.AreEqual (vs ["AllowSorting"], false, "A13"); 379 380 p.AutoGenerateColumns = true; 381 Assert.AreEqual (vs.Count, 4, "A14"); 382 Assert.AreEqual (vs ["AutoGenerateColumns"], true, "A15"); 383 p.AutoGenerateColumns = false; 384 Assert.AreEqual (vs.Count, 4, "A16"); 385 Assert.AreEqual (vs ["AutoGenerateColumns"], false, "A17"); 386 387 p.CurrentPageIndex = 1; 388 Assert.AreEqual (vs.Count, 5, "A18"); 389 Assert.AreEqual (vs ["CurrentPageIndex"], 1, "A19"); 390 391 p.EditItemIndex = 1; 392 Assert.AreEqual (vs.Count, 6, "A20"); 393 Assert.AreEqual (vs ["EditItemIndex"], 1, "A20"); 394 395 p.PageSize = 25; 396 Assert.AreEqual (vs.Count, 7, "A21"); 397 Assert.AreEqual (vs ["PageSize"], 25, "A22"); 398 399 p.SelectedIndex = 25; 400 Assert.AreEqual (vs.Count, 8, "A23"); 401 Assert.AreEqual (vs ["SelectedIndex"], 25, "A24"); 402 403 p.ShowFooter = false; 404 Assert.AreEqual (vs.Count, 9, "A25"); 405 Assert.AreEqual (vs ["ShowFooter"], false, "A26"); 406 p.ShowFooter = true; 407 Assert.AreEqual (vs ["ShowFooter"], true, "A27"); 408 409 p.ShowHeader = false; 410 Assert.AreEqual (vs.Count, 10, "A28"); 411 Assert.AreEqual (vs ["ShowHeader"], false, "A29"); 412 p.ShowHeader = true; 413 Assert.AreEqual (vs ["ShowHeader"], true, "A30"); 414 415 p.VirtualItemCount = 100; 416 Assert.AreEqual (vs.Count, 11, "A31"); 417 Assert.AreEqual (vs ["VirtualItemCount"], 100, "A32"); 418 } 419 420 [Test] SelectIndexOutOfRange()421 public void SelectIndexOutOfRange () 422 { 423 DataGridPoker p = new DataGridPoker (); 424 425 // No exception is thrown 426 p.SelectedIndex = 25; 427 } 428 429 [Test] 430 [ExpectedException (typeof (ArgumentOutOfRangeException))] SelectItemOutOfRange()431 public void SelectItemOutOfRange () 432 { 433 DataGridPoker p = new DataGridPoker (); 434 DataGridItem d; 435 436 p.SelectedIndex = 25; 437 d = p.SelectedItem; 438 } 439 440 [Test] ControlStyle()441 public void ControlStyle () 442 { 443 DataGridPoker p = new DataGridPoker (); 444 445 Assert.AreEqual (p.ControlStyle ().GetType (), 446 typeof (TableStyle), "A1"); 447 448 TableStyle t = (TableStyle) p.ControlStyle (); 449 Assert.AreEqual (t.GridLines, GridLines.Both, "A2"); 450 Assert.AreEqual (t.CellSpacing, 0, "A3"); 451 } 452 453 [Test] Styles()454 public void Styles () 455 { 456 DataGridPoker p = new DataGridPoker (); 457 StateBag vs = p.GetViewState (); 458 459 p.BackImageUrl = "foobar url"; 460 461 // The styles get stored in the view state 462 Assert.AreEqual (vs.Count, 0, "A1"); 463 Assert.IsNull (vs ["BackImageUrl"], "A2"); 464 Assert.IsNull (vs ["GridLines"], "A3"); 465 Assert.IsNull (vs ["CellSpacing"], "A4"); 466 } 467 468 private bool cancel_command; 469 private bool delete_command; 470 private bool edit_command; 471 private bool item_command; 472 private bool update_command; 473 private bool item_created; 474 private bool item_data_bound; 475 private bool page_index_changed; 476 private bool sort_command; 477 private bool selected_changed; 478 479 private int new_page_index; 480 ResetEvents()481 private void ResetEvents () 482 { 483 cancel_command = 484 delete_command = 485 edit_command = 486 item_command = 487 update_command = 488 item_created = 489 item_data_bound = 490 page_index_changed = 491 sort_command = 492 selected_changed = false; 493 494 new_page_index = Int32.MinValue; 495 } 496 CancelCommandHandler(object sender, DataGridCommandEventArgs e)497 private void CancelCommandHandler (object sender, DataGridCommandEventArgs e) 498 { 499 cancel_command = true; 500 } 501 DeleteCommandHandler(object sender, DataGridCommandEventArgs e)502 private void DeleteCommandHandler (object sender, DataGridCommandEventArgs e) 503 { 504 delete_command = true; 505 } 506 EditCommandHandler(object sender, DataGridCommandEventArgs e)507 private void EditCommandHandler (object sender, DataGridCommandEventArgs e) 508 { 509 edit_command = true; 510 } 511 ItemCommandHandler(object sender, DataGridCommandEventArgs e)512 private void ItemCommandHandler (object sender, DataGridCommandEventArgs e) 513 { 514 item_command = true; 515 } 516 UpdateCommandHandler(object sender, DataGridCommandEventArgs e)517 private void UpdateCommandHandler (object sender, DataGridCommandEventArgs e) 518 { 519 update_command = true; 520 } 521 ItemCreatedHandler(object sender, DataGridItemEventArgs e)522 private void ItemCreatedHandler (object sender, DataGridItemEventArgs e) 523 { 524 item_created = true; 525 } 526 ItemDataBoundHandler(object sender, DataGridItemEventArgs e)527 private void ItemDataBoundHandler (object sender, DataGridItemEventArgs e) 528 { 529 item_data_bound = true; 530 } 531 PageIndexChangedHandler(object sender, DataGridPageChangedEventArgs e)532 private void PageIndexChangedHandler (object sender, DataGridPageChangedEventArgs e) 533 { 534 page_index_changed = true; 535 new_page_index = e.NewPageIndex; 536 } 537 SortCommandHandler(object sender, DataGridSortCommandEventArgs e)538 private void SortCommandHandler (object sender, DataGridSortCommandEventArgs e) 539 { 540 sort_command = true; 541 } 542 SelectedIndexChangedHandler(object sender, EventArgs e)543 private void SelectedIndexChangedHandler (object sender, EventArgs e) 544 { 545 selected_changed = true; 546 } 547 548 [Test] Events()549 public void Events () 550 { 551 DataGridPoker p = new DataGridPoker (); 552 DataGridCommandEventArgs command_args = new DataGridCommandEventArgs (null, 553 null, new CommandEventArgs (String.Empty, String.Empty)); 554 DataGridItemEventArgs item_args = new DataGridItemEventArgs (null); 555 DataGridPageChangedEventArgs page_args = new DataGridPageChangedEventArgs (null, 0); 556 DataGridSortCommandEventArgs sort_args = new DataGridSortCommandEventArgs (null, 557 command_args); 558 559 ResetEvents (); 560 p.CancelCommand += new DataGridCommandEventHandler (CancelCommandHandler); 561 p.DoCancelCommand (command_args); 562 Assert.IsTrue (cancel_command, "A1"); 563 564 ResetEvents (); 565 p.DeleteCommand += new DataGridCommandEventHandler (DeleteCommandHandler); 566 p.DoDeleteCommand (command_args); 567 Assert.IsTrue (delete_command, "A2"); 568 569 ResetEvents (); 570 p.EditCommand += new DataGridCommandEventHandler (EditCommandHandler); 571 p.DoEditCommand (command_args); 572 Assert.IsTrue (edit_command, "A3"); 573 574 ResetEvents (); 575 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 576 p.DoItemCommand (command_args); 577 Assert.IsTrue (item_command, "A4"); 578 579 ResetEvents (); 580 p.UpdateCommand += new DataGridCommandEventHandler (UpdateCommandHandler); 581 p.DoUpdateCommand (command_args); 582 Assert.IsTrue (update_command, "A5"); 583 584 ResetEvents (); 585 p.ItemCreated += new DataGridItemEventHandler (ItemCreatedHandler); 586 p.DoItemCreated (item_args); 587 Assert.IsTrue (item_created, "A6"); 588 589 ResetEvents (); 590 p.ItemDataBound += new DataGridItemEventHandler (ItemDataBoundHandler); 591 p.DoItemDataBound (item_args); 592 Assert.IsTrue (item_data_bound, "A7"); 593 594 ResetEvents (); 595 p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); 596 p.DoPageIndexChanged (page_args); 597 Assert.IsTrue (page_index_changed, "A8"); 598 599 ResetEvents (); 600 p.SortCommand += new DataGridSortCommandEventHandler (SortCommandHandler); 601 p.DoSortCommand (sort_args); 602 Assert.IsTrue (sort_command, "A9"); 603 } 604 605 [Test] BubbleEvent()606 public void BubbleEvent () 607 { 608 DataGridPoker p = new DataGridPoker (); 609 DataGridCommandEventArgs command_args; 610 611 // 612 // Cancel 613 // 614 ResetEvents (); 615 command_args = new DataGridCommandEventArgs (null, 616 null, new CommandEventArgs ("Cancel", String.Empty)); 617 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 618 p.CancelCommand += new DataGridCommandEventHandler (CancelCommandHandler); 619 p.DoBubbleEvent (this, command_args); 620 Assert.IsTrue (cancel_command, "A1"); 621 Assert.IsTrue (item_command, "#01"); 622 623 ResetEvents (); 624 command_args = new DataGridCommandEventArgs (null, 625 null, new CommandEventArgs ("cancel", String.Empty)); 626 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 627 p.CancelCommand += new DataGridCommandEventHandler (CancelCommandHandler); 628 p.DoBubbleEvent (this, command_args); 629 Assert.IsTrue (cancel_command, "A2"); 630 Assert.IsTrue (item_command, "#02"); 631 632 ResetEvents (); 633 command_args = new DataGridCommandEventArgs (null, 634 null, new CommandEventArgs ("CANCEL", String.Empty)); 635 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 636 p.CancelCommand += new DataGridCommandEventHandler (CancelCommandHandler); 637 p.DoBubbleEvent (this, command_args); 638 Assert.IsTrue (cancel_command, "A3"); 639 Assert.IsTrue (item_command, "#03"); 640 641 // 642 // Delete 643 // 644 ResetEvents (); 645 command_args = new DataGridCommandEventArgs (null, 646 null, new CommandEventArgs ("Delete", String.Empty)); 647 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 648 p.DeleteCommand += new DataGridCommandEventHandler (DeleteCommandHandler); 649 p.DoBubbleEvent (this, command_args); 650 Assert.IsTrue (delete_command, "A4"); 651 Assert.IsTrue (item_command, "#04"); 652 653 ResetEvents (); 654 command_args = new DataGridCommandEventArgs (null, 655 null, new CommandEventArgs ("delete", String.Empty)); 656 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 657 p.DeleteCommand += new DataGridCommandEventHandler (DeleteCommandHandler); 658 p.DoBubbleEvent (this, command_args); 659 Assert.IsTrue (delete_command, "A5"); 660 Assert.IsTrue (item_command, "#05"); 661 662 ResetEvents (); 663 command_args = new DataGridCommandEventArgs (null, 664 null, new CommandEventArgs ("DELETE", String.Empty)); 665 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 666 p.DeleteCommand += new DataGridCommandEventHandler (DeleteCommandHandler); 667 p.DoBubbleEvent (this, command_args); 668 Assert.IsTrue (delete_command, "A6"); 669 Assert.IsTrue (item_command, "#06"); 670 671 // 672 // Edit 673 // 674 ResetEvents (); 675 command_args = new DataGridCommandEventArgs (null, 676 null, new CommandEventArgs ("Edit", String.Empty)); 677 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 678 p.EditCommand += new DataGridCommandEventHandler (EditCommandHandler); 679 p.DoBubbleEvent (this, command_args); 680 Assert.IsTrue (edit_command, "A7"); 681 Assert.IsTrue (item_command, "#07"); 682 683 ResetEvents (); 684 command_args = new DataGridCommandEventArgs (null, 685 null, new CommandEventArgs ("edit", String.Empty)); 686 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 687 p.EditCommand += new DataGridCommandEventHandler (EditCommandHandler); 688 p.DoBubbleEvent (this, command_args); 689 Assert.IsTrue (edit_command, "A8"); 690 Assert.IsTrue (item_command, "#08"); 691 692 ResetEvents (); 693 command_args = new DataGridCommandEventArgs (null, 694 null, new CommandEventArgs ("EDIT", String.Empty)); 695 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 696 p.EditCommand += new DataGridCommandEventHandler (EditCommandHandler); 697 p.DoBubbleEvent (this, command_args); 698 Assert.IsTrue (edit_command, "A9"); 699 Assert.IsTrue (item_command, "#09"); 700 701 // 702 // Item 703 // 704 ResetEvents (); 705 command_args = new DataGridCommandEventArgs (null, 706 null, new CommandEventArgs ("Item", String.Empty)); 707 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 708 p.DoBubbleEvent (this, command_args); 709 Assert.IsTrue (item_command, "A10"); 710 711 ResetEvents (); 712 command_args = new DataGridCommandEventArgs (null, 713 null, new CommandEventArgs ("item", String.Empty)); 714 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 715 p.DoBubbleEvent (this, command_args); 716 Assert.IsTrue (item_command, "A11"); 717 718 ResetEvents (); 719 command_args = new DataGridCommandEventArgs (null, 720 null, new CommandEventArgs ("ITEM", String.Empty)); 721 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 722 p.DoBubbleEvent (this, command_args); 723 Assert.IsTrue (item_command, "A12"); 724 725 // 726 // Sort 727 // 728 ResetEvents (); 729 command_args = new DataGridCommandEventArgs (null, 730 null, new CommandEventArgs ("Sort", String.Empty)); 731 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 732 p.SortCommand += new DataGridSortCommandEventHandler (SortCommandHandler); 733 p.DoBubbleEvent (this, command_args); 734 Assert.IsTrue (sort_command, "A13"); 735 Assert.IsTrue (item_command, "#10"); 736 737 ResetEvents (); 738 command_args = new DataGridCommandEventArgs (null, 739 null, new CommandEventArgs ("sort", String.Empty)); 740 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 741 p.SortCommand += new DataGridSortCommandEventHandler (SortCommandHandler); 742 p.DoBubbleEvent (this, command_args); 743 Assert.IsTrue (sort_command, "A14"); 744 Assert.IsTrue (item_command, "#11"); 745 746 ResetEvents (); 747 command_args = new DataGridCommandEventArgs (null, 748 null, new CommandEventArgs ("SORT", String.Empty)); 749 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 750 p.SortCommand += new DataGridSortCommandEventHandler (SortCommandHandler); 751 p.DoBubbleEvent (this, command_args); 752 Assert.IsTrue (sort_command, "A15"); 753 Assert.IsTrue (item_command, "#12"); 754 755 // 756 // Update 757 // 758 ResetEvents (); 759 command_args = new DataGridCommandEventArgs (null, 760 null, new CommandEventArgs ("Update", String.Empty)); 761 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 762 p.UpdateCommand += new DataGridCommandEventHandler (UpdateCommandHandler); 763 p.DoBubbleEvent (this, command_args); 764 Assert.IsTrue (update_command, "A16"); 765 Assert.IsTrue (item_command, "#13"); 766 767 ResetEvents (); 768 command_args = new DataGridCommandEventArgs (null, 769 null, new CommandEventArgs ("update", String.Empty)); 770 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 771 p.UpdateCommand += new DataGridCommandEventHandler (UpdateCommandHandler); 772 p.DoBubbleEvent (this, command_args); 773 Assert.IsTrue (update_command, "A17"); 774 Assert.IsTrue (item_command, "#14"); 775 776 ResetEvents (); 777 command_args = new DataGridCommandEventArgs (null, 778 null, new CommandEventArgs ("UPDATE", String.Empty)); 779 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 780 p.UpdateCommand += new DataGridCommandEventHandler (UpdateCommandHandler); 781 p.DoBubbleEvent (this, command_args); 782 Assert.IsTrue (update_command, "A18"); 783 Assert.IsTrue (item_command, "#15"); 784 785 // 786 // Select 787 // 788 DataGridItem item = new DataGridItem (0, 0, ListItemType.Item); 789 790 ResetEvents (); 791 command_args = new DataGridCommandEventArgs (item, null, 792 new CommandEventArgs ("Select", String.Empty)); 793 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 794 p.SelectedIndexChanged += new EventHandler (SelectedIndexChangedHandler); 795 p.DoBubbleEvent (this, command_args); 796 Assert.IsTrue (selected_changed, "A19"); 797 Assert.IsTrue (item_command, "#16"); 798 799 ResetEvents (); 800 command_args = new DataGridCommandEventArgs (item, null, 801 new CommandEventArgs ("select", String.Empty)); 802 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 803 p.SelectedIndexChanged += new EventHandler (SelectedIndexChangedHandler); 804 p.DoBubbleEvent (this, command_args); 805 Assert.IsTrue (selected_changed, "A20"); 806 Assert.IsTrue (item_command, "#17"); 807 808 ResetEvents (); 809 command_args = new DataGridCommandEventArgs (item, null, 810 new CommandEventArgs ("SELECT", String.Empty)); 811 p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); 812 p.SelectedIndexChanged += new EventHandler (SelectedIndexChangedHandler); 813 p.DoBubbleEvent (this, command_args); 814 Assert.IsTrue (selected_changed, "A21"); 815 Assert.IsTrue (item_command, "#18"); 816 } 817 818 [Test] BubblePageCommand()819 public void BubblePageCommand () 820 { 821 DataGridPoker p = new DataGridPoker (); 822 DataGridItem item = new DataGridItem (0, 0, ListItemType.Item); 823 DataGridCommandEventArgs command_args; 824 825 826 // 827 // Prev 828 // 829 ResetEvents (); 830 command_args = new DataGridCommandEventArgs (item, null, 831 new CommandEventArgs ("Page", "Prev")); 832 p.CurrentPageIndex = 10; 833 p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); 834 p.DoBubbleEvent (this, command_args); 835 Assert.IsTrue (page_index_changed, "A1"); 836 Assert.AreEqual (new_page_index, 9, "A2"); 837 838 ResetEvents (); 839 command_args = new DataGridCommandEventArgs (item, null, 840 new CommandEventArgs ("page", "prev")); 841 p.CurrentPageIndex = 10; 842 p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); 843 p.DoBubbleEvent (this, command_args); 844 Assert.IsTrue (page_index_changed, "A3"); 845 Assert.AreEqual (new_page_index, 9, "A4"); 846 847 ResetEvents (); 848 command_args = new DataGridCommandEventArgs (item, null, 849 new CommandEventArgs ("PAGE", "PREV")); 850 p.CurrentPageIndex = 10; 851 p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); 852 p.DoBubbleEvent (this, command_args); 853 Assert.IsTrue (page_index_changed, "A5"); 854 Assert.AreEqual (new_page_index, 9, "A6"); 855 856 857 // 858 // Next 859 // 860 ResetEvents (); 861 command_args = new DataGridCommandEventArgs (item, null, 862 new CommandEventArgs ("Page", "Next")); 863 p.CurrentPageIndex = 10; 864 p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); 865 p.DoBubbleEvent (this, command_args); 866 Assert.IsTrue (page_index_changed, "A5"); 867 Assert.AreEqual (new_page_index, 11, "A6"); 868 869 ResetEvents (); 870 command_args = new DataGridCommandEventArgs (item, null, 871 new CommandEventArgs ("page", "next")); 872 p.CurrentPageIndex = 10; 873 p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); 874 p.DoBubbleEvent (this, command_args); 875 Assert.IsTrue (page_index_changed, "A7"); 876 Assert.AreEqual (new_page_index, 11, "A8"); 877 878 ResetEvents (); 879 command_args = new DataGridCommandEventArgs (item, null, 880 new CommandEventArgs ("PAGE", "NEXT")); 881 p.CurrentPageIndex = 10; 882 p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); 883 p.DoBubbleEvent (this, command_args); 884 Assert.IsTrue (page_index_changed, "A9"); 885 Assert.AreEqual (new_page_index, 11, "A10"); 886 887 888 // 889 // Specific 890 // 891 ResetEvents (); 892 command_args = new DataGridCommandEventArgs (item, null, 893 new CommandEventArgs ("Page", "25")); 894 p.CurrentPageIndex = 10; 895 p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); 896 p.DoBubbleEvent (this, command_args); 897 Assert.IsTrue (page_index_changed, "A11"); 898 Assert.AreEqual (new_page_index, 24, "A12"); 899 900 ResetEvents (); 901 command_args = new DataGridCommandEventArgs (item, null, 902 new CommandEventArgs ("Page", "0")); 903 p.CurrentPageIndex = 10; 904 p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); 905 p.DoBubbleEvent (this, command_args); 906 Assert.IsTrue (page_index_changed, "A11"); 907 Assert.AreEqual (new_page_index, -1, "A12"); 908 } 909 910 [Test] 911 [ExpectedException (typeof (FormatException))] BadBubblePageArg()912 public void BadBubblePageArg () 913 { 914 DataGridPoker p = new DataGridPoker (); 915 DataGridItem item = new DataGridItem (0, 0, ListItemType.Item); 916 DataGridCommandEventArgs command_args; 917 918 ResetEvents (); 919 command_args = new DataGridCommandEventArgs (item, null, 920 new CommandEventArgs ("Page", "i am bad")); 921 922 p.DoBubbleEvent (this, command_args); 923 } 924 925 [Test] 926 [ExpectedException (typeof (InvalidCastException))] BadBubblePageArg2()927 public void BadBubblePageArg2 () 928 { 929 DataGridPoker p = new DataGridPoker (); 930 DataGridItem item = new DataGridItem (0, 0, ListItemType.Item); 931 DataGridCommandEventArgs command_args; 932 933 ResetEvents (); 934 command_args = new DataGridCommandEventArgs (item, null, 935 new CommandEventArgs ("Page", new object ())); 936 937 p.DoBubbleEvent (this, command_args); 938 } 939 940 [Test] SaveViewState()941 public void SaveViewState () 942 { 943 DataGridPoker p = new DataGridPoker (); 944 945 p.TrackState (); 946 947 object [] vs = (object []) p.SaveState (); 948 Assert.AreEqual (vs.Length, 11, "A1"); 949 950 // By default the viewstate is all null 951 for (int i = 0; i < vs.Length; i++) 952 Assert.IsNull (vs [i], "A2-" + i); 953 954 // 955 // TODO: What goes in the [1] and [9] slots? 956 // 957 958 p.AllowPaging = true; 959 vs = (object []) p.SaveState (); 960 Assert.IsNotNull (vs [0], "A3"); 961 962 /* 963 This test doesn't work right now. It must be an issue 964 in the DataGridPagerStyle 965 966 p.PagerStyle.Visible = true; 967 vs = (object []) p.SaveState (); 968 Assert.IsNotNull (vs [2], "A5"); 969 */ 970 971 p.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; 972 vs = (object []) p.SaveState (); 973 Assert.IsNotNull (vs [3], "A6"); 974 975 p.FooterStyle.HorizontalAlign = HorizontalAlign.Center; 976 vs = (object []) p.SaveState (); 977 Assert.IsNotNull (vs [4], "A7"); 978 979 p.ItemStyle.HorizontalAlign = HorizontalAlign.Center; 980 vs = (object []) p.SaveState (); 981 Assert.IsNotNull (vs [5], "A8"); 982 983 p.AlternatingItemStyle.HorizontalAlign = HorizontalAlign.Center; 984 vs = (object []) p.SaveState (); 985 Assert.IsNotNull (vs [6], "A9"); 986 987 p.SelectedItemStyle.HorizontalAlign = HorizontalAlign.Center; 988 vs = (object []) p.SaveState (); 989 Assert.IsNotNull (vs [7], "A10"); 990 991 p.EditItemStyle.HorizontalAlign = HorizontalAlign.Center; 992 vs = (object []) p.SaveState (); 993 Assert.IsNotNull (vs [8], "A11"); 994 995 PagedDataSource source = new PagedDataSource (); 996 DataTable table = new DataTable (); 997 ArrayList columns; 998 999 table.Columns.Add (new DataColumn ("one", typeof (string))); 1000 table.Columns.Add (new DataColumn ("two", typeof (string))); 1001 table.Columns.Add (new DataColumn ("three", typeof (string))); 1002 source.DataSource = new DataView (table); 1003 columns = p.CreateColumns (source, true); 1004 1005 vs = (object []) p.SaveState (); 1006 Assert.IsNull (vs [9], "A12"); 1007 p.BackImageUrl = "foobar url"; 1008 vs = (object []) p.SaveState (); 1009 Assert.IsNotNull (vs [9], "A12"); 1010 1011 Assert.IsNotNull (vs [10], "A12"); 1012 Assert.AreEqual (vs [10].GetType (), typeof (object []), "A12"); 1013 1014 object [] cols = (object []) vs [10]; 1015 Assert.AreEqual (cols.Length, 3, "A13"); 1016 } 1017 1018 [Test] CreateColumnSet()1019 public void CreateColumnSet () 1020 { 1021 DataGridPoker p = new DataGridPoker (); 1022 PagedDataSource source = new PagedDataSource (); 1023 DataTable table = new DataTable (); 1024 ArrayList columns; 1025 1026 table.Columns.Add (new DataColumn ("one", typeof (string))); 1027 table.Columns.Add (new DataColumn ("two", typeof (string))); 1028 table.Columns.Add (new DataColumn ("three", typeof (string))); 1029 1030 source.DataSource = new DataView (table); 1031 1032 columns = p.CreateColumns (source, true); 1033 Assert.AreEqual (columns.Count, 3, "A1"); 1034 Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "one", "A2"); 1035 Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "two", "A3"); 1036 Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "three", "A4"); 1037 1038 // AutoGenerated columns are not added to the ColumnsCollection 1039 Assert.AreEqual (p.Columns.Count, 0, "A5"); 1040 1041 // Without allowing data dinding, 1042 columns = p.CreateColumns (source, false); 1043 Assert.AreEqual (columns.Count, 3, "A6"); 1044 Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "one", "A7"); 1045 Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "two", "A8"); 1046 Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "three", "A9"); 1047 1048 1049 // Mixing with already added columns 1050 p = new DataGridPoker (); 1051 DataGridColumn a = new ButtonColumn (); 1052 DataGridColumn b = new ButtonColumn (); 1053 1054 a.HeaderText = "A"; 1055 b.HeaderText = "B"; 1056 p.Columns.Add (a); 1057 p.Columns.Add (b); 1058 1059 columns = p.CreateColumns (source, true); 1060 Assert.AreEqual (columns.Count, 5, "A6"); 1061 Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "A", "A10"); 1062 Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "B", "A11"); 1063 Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "one", "A12"); 1064 Assert.AreEqual (((DataGridColumn) columns [3]).HeaderText, "two", "A13"); 1065 Assert.AreEqual (((DataGridColumn) columns [4]).HeaderText, "three", "A14"); 1066 1067 // Assigned properties of the newly created columns 1068 BoundColumn one = (BoundColumn) columns [2]; 1069 1070 Assert.AreEqual (one.HeaderText, "one", "A15"); 1071 Assert.AreEqual (one.DataField, "one", "A16"); 1072 Assert.AreEqual (one.DataFormatString, String.Empty, "A17"); 1073 Assert.AreEqual (one.SortExpression, "one", "A18"); 1074 Assert.AreEqual (one.HeaderImageUrl, String.Empty, "A19"); 1075 Assert.AreEqual (one.FooterText, String.Empty, "A20"); 1076 } 1077 1078 [Test] CreateColumnsBinding()1079 public void CreateColumnsBinding () 1080 { 1081 DataGridPoker p = new DataGridPoker (); 1082 PagedDataSource source = new PagedDataSource (); 1083 DataTable table = new DataTable (); 1084 ArrayList columns; 1085 1086 table.Columns.Add (new DataColumn ("one", typeof (string))); 1087 table.Columns.Add (new DataColumn ("two", typeof (string))); 1088 table.Columns.Add (new DataColumn ("three", typeof (string))); 1089 1090 source.DataSource = new DataView (table); 1091 1092 columns = p.CreateColumns (source, true); 1093 Assert.AreEqual (columns.Count, 3, "A1"); 1094 Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "one", "A2"); 1095 Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "two", "A3"); 1096 Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "three", "A4"); 1097 1098 table.Columns.Add (new DataColumn ("four", typeof (string))); 1099 table.Columns.Add (new DataColumn ("five", typeof (string))); 1100 table.Columns.Add (new DataColumn ("six", typeof (string))); 1101 1102 // Just gets the old columns 1103 columns = p.CreateColumns (source, false); 1104 Assert.AreEqual (columns.Count, 3, "A5"); 1105 Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "one", "A6"); 1106 Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "two", "A7"); 1107 Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "three", "A8"); 1108 1109 columns = p.CreateColumns (source, true); 1110 Assert.AreEqual (columns.Count, 6, "A9"); 1111 Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "one", "A10"); 1112 Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "two", "A11"); 1113 Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "three", "A12"); 1114 Assert.AreEqual (((DataGridColumn) columns [3]).HeaderText, "four", "A13"); 1115 Assert.AreEqual (((DataGridColumn) columns [4]).HeaderText, "five", "A14"); 1116 Assert.AreEqual (((DataGridColumn) columns [5]).HeaderText, "six", "A15"); 1117 1118 // Assigned properties of the newly created columns 1119 BoundColumn one = (BoundColumn) columns [0]; 1120 1121 Assert.AreEqual (one.HeaderText, "one", "A16"); 1122 Assert.AreEqual (one.DataField, "one", "A17"); 1123 Assert.AreEqual (one.DataFormatString, String.Empty, "A18"); 1124 Assert.AreEqual (one.SortExpression, "one", "A19"); 1125 Assert.AreEqual (one.HeaderImageUrl, String.Empty, "A20"); 1126 Assert.AreEqual (one.FooterText, String.Empty, "A21"); 1127 } 1128 1129 [Test] CreateSimpleColumns()1130 public void CreateSimpleColumns () 1131 { 1132 DataGridPoker p = new DataGridPoker (); 1133 PagedDataSource source = new PagedDataSource (); 1134 ArrayList list = new ArrayList (); 1135 ArrayList columns; 1136 1137 list.Add ("One"); 1138 list.Add ("Two"); 1139 list.Add ("Three"); 1140 1141 source.DataSource = list; 1142 columns = p.CreateColumns (source, true); 1143 Assert.AreEqual (1, columns.Count, "A1"); 1144 Assert.AreEqual ("Item", ((DataGridColumn) columns [0]).HeaderText, "A2"); 1145 1146 AmazingEnumerable amazing = new AmazingEnumerable (list); 1147 1148 source.DataSource = amazing; 1149 columns = p.CreateColumns (source, true); 1150 Assert.AreEqual (1, columns.Count, "A3"); 1151 1152 BoundColumn one = (BoundColumn) columns [0]; 1153 1154 Assert.AreEqual ("Item", one.HeaderText, "A4"); 1155 1156 // I guess this makes it bind to itself ? 1157 Assert.AreEqual (BoundColumn.thisExpr, one.DataField, "A5"); 1158 1159 Assert.AreEqual (String.Empty, one.DataFormatString, "A6"); 1160 Assert.AreEqual ("Item", one.SortExpression, "A7"); 1161 Assert.AreEqual (String.Empty, one.HeaderImageUrl, "A8"); 1162 Assert.AreEqual (String.Empty, one.FooterText, "A9"); 1163 Assert.AreEqual ("Item", one.HeaderText, "A10"); 1164 1165 source.DataSource = new ArrayList (); 1166 columns = p.CreateColumns (source, true); 1167 Assert.AreEqual (0, columns.Count, "A11"); 1168 } 1169 1170 [Test] DataBindingEnumerator()1171 public void DataBindingEnumerator () 1172 { 1173 DataGridPoker p = new DataGridPoker (); 1174 PagedDataSource source = new PagedDataSource (); 1175 ArrayList list = new ArrayList (); 1176 ArrayList columns; 1177 1178 list.Add ("One"); 1179 list.Add ("Two"); 1180 list.Add ("Three"); 1181 1182 AmazingEnumerable amazing = new AmazingEnumerable (list); 1183 source.DataSource = amazing; 1184 columns = p.CreateColumns (source, true); 1185 Assert.AreEqual (1, columns.Count, "A1"); 1186 Assert.AreEqual ("Item", ((DataGridColumn) columns [0]).HeaderText, "A2"); 1187 Assert.AreEqual (1, amazing.CallCount, "A3"); 1188 Assert.AreEqual (0, p.DataKeys.Count, "A4"); 1189 } 1190 1191 class Custom : ICustomTypeDescriptor { GetAttributes()1192 public AttributeCollection GetAttributes () 1193 { 1194 throw new Exception (); 1195 } 1196 GetClassName()1197 public string GetClassName() 1198 { 1199 throw new Exception (); 1200 } 1201 GetComponentName()1202 public string GetComponentName() 1203 { 1204 throw new Exception (); 1205 } 1206 GetConverter()1207 public TypeConverter GetConverter() 1208 { 1209 throw new Exception (); 1210 } 1211 GetDefaultEvent()1212 public EventDescriptor GetDefaultEvent() 1213 { 1214 throw new Exception (); 1215 } 1216 GetDefaultProperty()1217 public PropertyDescriptor GetDefaultProperty() 1218 { 1219 throw new Exception (); 1220 } 1221 GetEditor(Type editorBaseType)1222 public object GetEditor (Type editorBaseType) 1223 { 1224 throw new Exception (); 1225 } 1226 GetEvents()1227 public EventDescriptorCollection GetEvents () 1228 { 1229 throw new Exception (); 1230 } 1231 GetEvents(Attribute[] arr)1232 public EventDescriptorCollection GetEvents (Attribute[] arr) 1233 { 1234 throw new Exception (); 1235 } 1236 1237 public int CallCount; GetProperties()1238 public PropertyDescriptorCollection GetProperties() 1239 { 1240 // MS calls this one 1241 if (CallCount++ > 0) 1242 throw new Exception ("This should not happen"); 1243 PropertyDescriptorCollection coll = new PropertyDescriptorCollection (null); 1244 coll.Add (new MyPropertyDescriptor ()); 1245 return coll; 1246 } 1247 GetProperties(Attribute[] arr)1248 public PropertyDescriptorCollection GetProperties (Attribute[] arr) 1249 { 1250 // We call this one 1251 return GetProperties (); 1252 } 1253 GetPropertyOwner(PropertyDescriptor pd)1254 public object GetPropertyOwner (PropertyDescriptor pd) 1255 { 1256 throw new Exception (); 1257 } 1258 } 1259 1260 class MyPropertyDescriptor : PropertyDescriptor { 1261 int val; 1262 MyPropertyDescriptor()1263 public MyPropertyDescriptor () : base ("CustomName", null) 1264 { 1265 } 1266 1267 public override Type ComponentType { 1268 get { return typeof (MyPropertyDescriptor); } 1269 } 1270 1271 public override bool IsReadOnly { 1272 get { return true; } 1273 } 1274 1275 public override Type PropertyType { 1276 get { return typeof (int); } 1277 } 1278 GetValue(object component)1279 public override object GetValue (object component) 1280 { 1281 return val++; 1282 } 1283 SetValue(object component, object value)1284 public override void SetValue (object component, object value) 1285 { 1286 } 1287 ResetValue(object component)1288 public override void ResetValue (object component) 1289 { 1290 } 1291 CanResetValue(object component)1292 public override bool CanResetValue (object component) 1293 { 1294 return false; 1295 } 1296 ShouldSerializeValue(object component)1297 public override bool ShouldSerializeValue (object component) 1298 { 1299 return false; 1300 } 1301 } 1302 1303 class MyEnumerable : IEnumerable { 1304 public object Item; GetEnumerator()1305 public IEnumerator GetEnumerator () 1306 { 1307 ArrayList list = new ArrayList (); 1308 list.Add (Item); 1309 return list.GetEnumerator (); 1310 } 1311 } 1312 1313 [Test] DataBindingCustomElement()1314 public void DataBindingCustomElement () 1315 { 1316 DataGridPoker p = new DataGridPoker (); 1317 p.DataKeyField = "CustomName"; 1318 PagedDataSource source = new PagedDataSource (); 1319 MyEnumerable myenum = new MyEnumerable (); 1320 myenum.Item = new Custom (); 1321 source.DataSource = myenum; 1322 ArrayList columns = p.CreateColumns (source, true); 1323 Assert.AreEqual (1, columns.Count, "A1"); 1324 Assert.AreEqual ("CustomName", ((DataGridColumn) columns [0]).HeaderText, "A2"); 1325 Assert.AreEqual (0, p.DataKeys.Count, "A3"); 1326 } 1327 1328 public class data 1329 { 1330 private static ArrayList _data = new ArrayList (); 1331 data()1332 static data () { 1333 _data.Add (new DataItem (1, "heh1")); 1334 _data.Add (new DataItem (2, "heh2")); 1335 _data.Add (new DataItem (3, "heh3")); 1336 _data.Add (new DataItem (4, "heh4")); 1337 _data.Add (new DataItem (5, "heh5")); 1338 _data.Add (new DataItem (6, "heh6")); 1339 _data.Add (new DataItem (7, "heh7")); 1340 _data.Add (new DataItem (8, "heh8")); 1341 _data.Add (new DataItem (9, "heh9")); 1342 _data.Add (new DataItem (10, "heh10")); 1343 } 1344 data()1345 public data () { 1346 } 1347 GetAllItems()1348 public ArrayList GetAllItems () { 1349 return _data; 1350 } 1351 GetPagedItems(int startIndex, int maxRows)1352 public ArrayList GetPagedItems (int startIndex, int maxRows) 1353 { 1354 ArrayList list = new ArrayList (); 1355 if (startIndex < _data.Count - 1) { 1356 int countToReturn = Math.Min (maxRows, _data.Count - startIndex); 1357 for (int i = startIndex; i < startIndex + countToReturn; i++) { 1358 list.Add (_data [i]); 1359 } 1360 } 1361 1362 return list; 1363 } 1364 GetCount()1365 public int GetCount () 1366 { 1367 return _data.Count; 1368 } 1369 UpdateItem(int id, string name)1370 public void UpdateItem (int id, string name) { 1371 foreach (DataItem i in _data) { 1372 if (i.ID == id) { 1373 i.Name = name; 1374 return; 1375 } 1376 } 1377 } 1378 } 1379 1380 public class DataItem 1381 { 1382 int _id = 0; 1383 string _name = ""; 1384 DataItem(int id, string name)1385 public DataItem (int id, string name) { 1386 _id = id; 1387 _name = name; 1388 } 1389 1390 public int ID { 1391 get { return _id; } 1392 } 1393 1394 public string Name { 1395 get { return _name; } 1396 set { _name = value; } 1397 } 1398 } 1399 1400 public class DataSourceObject 1401 { GetList(string sortExpression, int startRowIndex, int maximumRows)1402 public static List<string> GetList (string sortExpression, int startRowIndex, int maximumRows) { 1403 return GetList (); 1404 } 1405 GetList(int startRowIndex, int maximumRows)1406 public static List<string> GetList (int startRowIndex, int maximumRows) { 1407 return GetList (); 1408 } 1409 GetList(string sortExpression)1410 public static List<string> GetList (string sortExpression) { 1411 return GetList (); 1412 } 1413 GetList()1414 public static List<string> GetList () { 1415 List<string> list = new List<string> (); 1416 list.Add ("Norway"); 1417 list.Add ("Sweden"); 1418 list.Add ("France"); 1419 list.Add ("Italy"); 1420 list.Add ("Israel"); 1421 list.Add ("Russia"); 1422 return list; 1423 } 1424 GetCount()1425 public static int GetCount () { 1426 return GetList ().Count; 1427 } 1428 } 1429 1430 [Test] 1431 [ExpectedException(typeof(InvalidOperationException))] DataSourceAndDataSourceID()1432 public void DataSourceAndDataSourceID () 1433 { 1434 Page page = new Page (); 1435 DataGridPoker dg = new DataGridPoker (); 1436 1437 page.Controls.Add (dg); 1438 1439 DataTable dt = new DataTable (); 1440 dt.Columns.Add (new DataColumn ("something", typeof (Int32))); 1441 DataRow dr = dt.NewRow (); 1442 dt.Rows.Add (new object [] { 1 }); 1443 DataView dv = new DataView (dt); 1444 1445 dg.DataSource = dv; 1446 1447 ObjectDataSource ds = new ObjectDataSource (); 1448 ds.TypeName = typeof (DataSourceObject).AssemblyQualifiedName; 1449 ds.SelectMethod = "GetList"; 1450 ds.SortParameterName = "sortExpression"; 1451 ds.ID = "Data"; 1452 page.Controls.Add (ds); 1453 1454 dg.DataSourceID = "Data"; 1455 1456 dg.DataBind (); 1457 } 1458 1459 [Test] DataBindingDataSourceID()1460 public void DataBindingDataSourceID () 1461 { 1462 Page page = new Page (); 1463 DataGridPoker dg = new DataGridPoker (); 1464 page.Controls.Add (dg); 1465 1466 ObjectDataSource ds = new ObjectDataSource (); 1467 ds.TypeName = typeof (DataSourceObject).AssemblyQualifiedName; 1468 ds.SelectMethod = "GetList"; 1469 ds.SortParameterName = "sortExpression"; 1470 ds.ID = "Data"; 1471 page.Controls.Add (ds); 1472 1473 dg.DataSourceID = "Data"; 1474 dg.DataBind (); 1475 1476 Assert.AreEqual (6, dg.Items.Count, "DataBindingDataSourceID"); 1477 } 1478 1479 [Test] 1480 [NUnit.Framework.Category ("NunitWeb")] DataBindingDataSourceIDAutomatic()1481 public void DataBindingDataSourceIDAutomatic () 1482 { 1483 WebTest t = new WebTest (); 1484 PageDelegates pd = new PageDelegates(); 1485 pd.Load = DataSourceIDAutomatic_Load; 1486 pd.PreRender = DataSourceIDAutomatic_PreRender; 1487 t.Invoker = new PageInvoker (pd); 1488 1489 t.Run (); 1490 } 1491 DataSourceIDAutomatic_Load(Page page)1492 public static void DataSourceIDAutomatic_Load (Page page) 1493 { 1494 DataGridPoker dg = new DataGridPoker (); 1495 dg.ID = "DataGrid"; 1496 page.Controls.Add (dg); 1497 1498 ObjectDataSource ds = new ObjectDataSource (); 1499 ds.TypeName = typeof (DataSourceObject).AssemblyQualifiedName; 1500 ds.SelectMethod = "GetList"; 1501 ds.SortParameterName = "sortExpression"; 1502 ds.ID = "Data"; 1503 page.Controls.Add (ds); 1504 1505 dg.DataSourceID = "Data"; 1506 } 1507 DataSourceIDAutomatic_PreRender(Page page)1508 public static void DataSourceIDAutomatic_PreRender (Page page) 1509 { 1510 DataGrid dg = (DataGrid)page.FindControl ("DataGrid"); 1511 1512 Assert.AreEqual (6, dg.Items.Count, "DataBindingDataSourceID"); 1513 } 1514 1515 [Test] DataSourceIDBindingNoColumns()1516 public void DataSourceIDBindingNoColumns () 1517 { 1518 Page page = new Page (); 1519 DataGridPoker dg = new DataGridPoker (); 1520 dg.ID = "DataGrid"; 1521 dg.AutoGenerateColumns = false; 1522 1523 page.Controls.Add (dg); 1524 1525 ObjectDataSource ds = new ObjectDataSource (); 1526 ds.TypeName = typeof (DataSourceObject).AssemblyQualifiedName; 1527 ds.SelectMethod = "GetList"; 1528 ds.SortParameterName = "sortExpression"; 1529 ds.ID = "Data"; 1530 page.Controls.Add (ds); 1531 1532 dg.DataSourceID = "Data"; 1533 dg.DataBind (); 1534 1535 Assert.AreEqual (0, dg.Columns.Count, "Columns Count"); 1536 Assert.AreEqual (0, dg.Items.Count, "Items Count"); 1537 } 1538 1539 [Test] DataSourceIDBindingManualColumns()1540 public void DataSourceIDBindingManualColumns () 1541 { 1542 Page page = new Page (); 1543 DataGridPoker dg = new DataGridPoker (); 1544 dg.ID = "DataGrid"; 1545 dg.AutoGenerateColumns = false; 1546 BoundColumn col = new BoundColumn(); 1547 col.DataField = "something"; 1548 dg.Columns.Add (col); 1549 1550 page.Controls.Add (dg); 1551 1552 DataTable dt = new DataTable (); 1553 dt.Columns.Add (new DataColumn ("something", typeof (Int32))); 1554 DataRow dr = dt.NewRow (); 1555 dt.Rows.Add (new object [] { 1 }); 1556 dt.Rows.Add (new object [] { 2 }); 1557 dt.Rows.Add (new object [] { 3 }); 1558 dt.Rows.Add (new object [] { 4 }); 1559 dt.Rows.Add (new object [] { 5 }); 1560 dt.Rows.Add (new object [] { 6 }); 1561 1562 DataView dv = new DataView (dt); 1563 1564 dg.DataSource = dv; 1565 dg.DataBind (); 1566 1567 Assert.AreEqual (1, dg.Columns.Count, "Columns Count"); 1568 Assert.AreEqual (6, dg.Items.Count, "Items Count"); 1569 Assert.AreEqual ("1", dg.Items[0].Cells[0].Text, "Cell content"); 1570 } 1571 1572 [Test] 1573 [NUnit.Framework.Category ("NunitWeb")] Paging()1574 public void Paging () 1575 { 1576 WebTest t = new WebTest ("DataGrid.aspx"); 1577 t.Invoker = PageInvoker.CreateOnInit (DataGrid_OnInit); 1578 string html = t.Run (); 1579 string gridHtml = HtmlDiff.GetControlFromPageHtml (html); 1580 string expectedFirstPage = "\n <table cellspacing=\"0\" cellpadding=\"4\" id=\"DataGrid1\" style=\"color:#333333;border-collapse:collapse;\">\r\n\t<tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td>ID</td><td>Name</td><td> </td><td> </td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl00','')\" style=\"color:White;\">ID</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl01','')\" style=\"color:White;\">Name</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl02','')\" style=\"color:White;\">Comment</a></td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>1</td><td>heh1</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>1</td><td>heh1</td><td>Comment 1</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>2</td><td>heh2</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>2</td><td>heh2</td><td>Comment 2</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>3</td><td>heh3</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>3</td><td>heh3</td><td>Comment 3</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>4</td><td>heh4</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>4</td><td>heh4</td><td>Comment 4</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>5</td><td>heh5</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>5</td><td>heh5</td><td>Comment 5</td>\r\n\t</tr><tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td>\r\n\t</tr><tr align=\"center\" style=\"color:#333333;background-color:#FFCC66;\">\r\n\t\t<td colspan=\"4\"><span>Previous</span> <a href=\"javascript:__doPostBack('DataGrid1$ctl09$ctl01','')\" style=\"color:#333333;\">Next</a></td>\r\n\t</tr>\r\n</table>"; 1581 1582 HtmlDiff.AssertAreEqual (expectedFirstPage, gridHtml, "DataGrid initial Render"); 1583 1584 FormRequest fr = new FormRequest (t.Response, "form1"); 1585 fr.Controls.Add ("__EVENTTARGET"); 1586 fr.Controls.Add ("__EVENTARGUMENT"); 1587 #if DOT_NET 1588 fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl09$ctl01"; 1589 #else 1590 fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl08$ctl01"; 1591 #endif 1592 fr.Controls ["__EVENTARGUMENT"].Value = ""; 1593 t.Request = fr; 1594 1595 html = t.Run (); 1596 gridHtml = HtmlDiff.GetControlFromPageHtml (html); 1597 string expectedSecondPage = "\n <table cellspacing=\"0\" cellpadding=\"4\" id=\"DataGrid1\" style=\"color:#333333;border-collapse:collapse;\">\r\n\t<tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td>ID</td><td>Name</td><td> </td><td> </td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl00','')\" style=\"color:White;\">ID</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl01','')\" style=\"color:White;\">Name</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl02','')\" style=\"color:White;\">Comment</a></td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>6</td><td>heh6</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>6</td><td>heh6</td><td>Comment 6</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>7</td><td>heh7</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>7</td><td>heh7</td><td>Comment 7</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>8</td><td>heh8</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>8</td><td>heh8</td><td>Comment 8</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>9</td><td>heh9</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>9</td><td>heh9</td><td>Comment 9</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>10</td><td>heh10</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>10</td><td>heh10</td><td>Comment 10</td>\r\n\t</tr><tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td>\r\n\t</tr><tr align=\"center\" style=\"color:#333333;background-color:#FFCC66;\">\r\n\t\t<td colspan=\"4\"><a href=\"javascript:__doPostBack('DataGrid1$ctl09$ctl00','')\" style=\"color:#333333;\">Previous</a> <span>Next</span></td>\r\n\t</tr>\r\n</table>"; 1598 HtmlDiff.AssertAreEqual (expectedSecondPage, gridHtml, "DataGrid Paging Next"); 1599 1600 fr = new FormRequest (t.Response, "form1"); 1601 fr.Controls.Add ("__EVENTTARGET"); 1602 fr.Controls.Add ("__EVENTARGUMENT"); 1603 #if DOT_NET 1604 fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl09$ctl00"; 1605 #else 1606 fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl08$ctl00"; 1607 #endif 1608 fr.Controls ["__EVENTARGUMENT"].Value = ""; 1609 t.Request = fr; 1610 1611 html = t.Run (); 1612 gridHtml = HtmlDiff.GetControlFromPageHtml (html); 1613 1614 HtmlDiff.AssertAreEqual (expectedFirstPage, gridHtml, "DataGrid Paging Previous"); 1615 } 1616 1617 [Test] 1618 [NUnit.Framework.Category ("NunitWeb")] EditUpdateDelete()1619 public void EditUpdateDelete () 1620 { 1621 WebTest t = new WebTest ("DataGrid.aspx"); 1622 t.Invoker = PageInvoker.CreateOnInit (DataGrid_OnInit); 1623 string html = t.Run (); 1624 string gridHtml = HtmlDiff.GetControlFromPageHtml (html); 1625 string expectedFirstPage = "\n <table cellspacing=\"0\" cellpadding=\"4\" id=\"DataGrid1\" style=\"color:#333333;border-collapse:collapse;\">\r\n\t<tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td>ID</td><td>Name</td><td> </td><td> </td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl00','')\" style=\"color:White;\">ID</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl01','')\" style=\"color:White;\">Name</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl02','')\" style=\"color:White;\">Comment</a></td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>1</td><td>heh1</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>1</td><td>heh1</td><td>Comment 1</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>2</td><td>heh2</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>2</td><td>heh2</td><td>Comment 2</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>3</td><td>heh3</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>3</td><td>heh3</td><td>Comment 3</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>4</td><td>heh4</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>4</td><td>heh4</td><td>Comment 4</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>5</td><td>heh5</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>5</td><td>heh5</td><td>Comment 5</td>\r\n\t</tr><tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td>\r\n\t</tr><tr align=\"center\" style=\"color:#333333;background-color:#FFCC66;\">\r\n\t\t<td colspan=\"4\"><span>Previous</span> <a href=\"javascript:__doPostBack('DataGrid1$ctl09$ctl01','')\" style=\"color:#333333;\">Next</a></td>\r\n\t</tr>\r\n</table>"; 1626 1627 HtmlDiff.AssertAreEqual (expectedFirstPage, gridHtml, "DataGrid initial Render"); 1628 1629 FormRequest fr = new FormRequest (t.Response, "form1"); 1630 fr.Controls.Add ("__EVENTTARGET"); 1631 fr.Controls.Add ("__EVENTARGUMENT"); 1632 #if DOT_NET 1633 fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl03$ctl00"; 1634 #else 1635 fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl02$ctl00"; 1636 #endif 1637 fr.Controls ["__EVENTARGUMENT"].Value = ""; 1638 t.Request = fr; 1639 1640 html = t.Run (); 1641 gridHtml = HtmlDiff.GetControlFromPageHtml (html); 1642 string expectedSecondPage = "\n <table cellspacing=\"0\" cellpadding=\"4\" id=\"DataGrid1\" style=\"color:#333333;border-collapse:collapse;\">\r\n\t<tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td>ID</td><td>Name</td><td> </td><td> </td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl00','')\" style=\"color:White;\">ID</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl01','')\" style=\"color:White;\">Name</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl02','')\" style=\"color:White;\">Comment</a></td>\r\n\t</tr><tr style=\"color:#333333;background-color:Green;font-weight:normal;font-style:normal;text-decoration:none;\">\r\n\t\t<td>1</td><td><input name=\"DataGrid1$ctl03$ctl00\" type=\"text\" value=\"heh1\" /></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl01','')\" style=\"color:#333333;\">Update</a> <a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl02','')\" style=\"color:#333333;\">Cancel</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl03','')\" style=\"color:#333333;\">Delete</a></td><td>1</td><td><input name=\"DataGrid1$ctl03$ctl04\" type=\"text\" value=\"heh1\" /></td><td><input name=\"DataGrid1$ctl03$ctl05\" type=\"text\" value=\"Comment 1\" /></td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>2</td><td>heh2</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>2</td><td>heh2</td><td>Comment 2</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>3</td><td>heh3</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>3</td><td>heh3</td><td>Comment 3</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>4</td><td>heh4</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>4</td><td>heh4</td><td>Comment 4</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>5</td><td>heh5</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>5</td><td>heh5</td><td>Comment 5</td>\r\n\t</tr><tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td>\r\n\t</tr><tr align=\"center\" style=\"color:#333333;background-color:#FFCC66;\">\r\n\t\t<td colspan=\"4\"><span>Previous</span> <a href=\"javascript:__doPostBack('DataGrid1$ctl09$ctl01','')\" style=\"color:#333333;\">Next</a></td>\r\n\t</tr>\r\n</table>"; 1643 HtmlDiff.AssertAreEqual (expectedSecondPage, gridHtml, "DataGrid Edit"); 1644 1645 fr = new FormRequest (t.Response, "form1"); 1646 fr.Controls.Add ("__EVENTTARGET"); 1647 fr.Controls.Add ("__EVENTARGUMENT"); 1648 #if DOT_NET 1649 fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl03$ctl01"; 1650 #else 1651 fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl02$ctl01"; 1652 #endif 1653 fr.Controls ["__EVENTARGUMENT"].Value = ""; 1654 #if DOT_NET 1655 fr.Controls.Add ("DataGrid1$ctl03$ctl00"); 1656 fr.Controls ["DataGrid1$ctl03$ctl00"].Value = "New Value"; 1657 #else 1658 fr.Controls.Add ("DataGrid1$ctl02$ctl00"); 1659 fr.Controls ["DataGrid1$ctl02$ctl00"].Value = "New Value"; 1660 #endif 1661 t.Request = fr; 1662 1663 html = t.Run (); 1664 gridHtml = HtmlDiff.GetControlFromPageHtml (html); 1665 string expectedThirdPage = "\n <table cellspacing=\"0\" cellpadding=\"4\" id=\"DataGrid1\" style=\"color:#333333;border-collapse:collapse;\">\r\n\t<tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td>ID</td><td>Name</td><td> </td><td> </td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl00','')\" style=\"color:White;\">ID</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl01','')\" style=\"color:White;\">Name</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl02','')\" style=\"color:White;\">Comment</a></td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>1</td><td>New Value</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>1</td><td>New Value</td><td>Comment 1</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>2</td><td>heh2</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>2</td><td>heh2</td><td>Comment 2</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>3</td><td>heh3</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>3</td><td>heh3</td><td>Comment 3</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>4</td><td>heh4</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>4</td><td>heh4</td><td>Comment 4</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>5</td><td>heh5</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>5</td><td>heh5</td><td>Comment 5</td>\r\n\t</tr><tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td>\r\n\t</tr><tr align=\"center\" style=\"color:#333333;background-color:#FFCC66;\">\r\n\t\t<td colspan=\"4\"><span>Previous</span> <a href=\"javascript:__doPostBack('DataGrid1$ctl09$ctl01','')\" style=\"color:#333333;\">Next</a></td>\r\n\t</tr>\r\n</table>"; 1666 1667 HtmlDiff.AssertAreEqual (expectedThirdPage, gridHtml, "DataGrid Update"); 1668 1669 fr = new FormRequest (t.Response, "form1"); 1670 fr.Controls.Add ("__EVENTTARGET"); 1671 fr.Controls.Add ("__EVENTARGUMENT"); 1672 #if DOT_NET 1673 fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl04$ctl01"; 1674 #else 1675 fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl03$ctl01"; 1676 #endif 1677 fr.Controls ["__EVENTARGUMENT"].Value = ""; 1678 t.Request = fr; 1679 1680 html = t.Run (); 1681 gridHtml = HtmlDiff.GetControlFromPageHtml (html); 1682 string expectedFourthPage = "\n <table cellspacing=\"0\" cellpadding=\"4\" id=\"DataGrid1\" style=\"color:#333333;border-collapse:collapse;\">\r\n\t<tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td>ID</td><td>Name</td><td> </td><td> </td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl00','')\" style=\"color:White;\">ID</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl01','')\" style=\"color:White;\">Name</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl02','')\" style=\"color:White;\">Comment</a></td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>1</td><td>New Value</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>1</td><td>New Value</td><td>Comment 1</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>3</td><td>heh3</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>3</td><td>heh3</td><td>Comment 3</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>4</td><td>heh4</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>4</td><td>heh4</td><td>Comment 4</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>5</td><td>heh5</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>5</td><td>heh5</td><td>Comment 5</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>6</td><td>heh6</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>6</td><td>heh6</td><td>Comment 6</td>\r\n\t</tr><tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td>\r\n\t</tr><tr align=\"center\" style=\"color:#333333;background-color:#FFCC66;\">\r\n\t\t<td colspan=\"4\"><span>Previous</span> <a href=\"javascript:__doPostBack('DataGrid1$ctl09$ctl01','')\" style=\"color:#333333;\">Next</a></td>\r\n\t</tr>\r\n</table>"; 1683 1684 HtmlDiff.AssertAreEqual (expectedFourthPage, gridHtml, "DataGrid Delete"); 1685 } 1686 1687 [Test] 1688 [NUnit.Framework.Category ("NunitWeb")] SelectedIndex()1689 public void SelectedIndex () 1690 { 1691 WebTest t = new WebTest ("DataGrid.aspx"); 1692 t.Invoker = PageInvoker.CreateOnInit (DataGrid_OnInit); 1693 string html = t.Run (); 1694 string gridHtml = HtmlDiff.GetControlFromPageHtml (html); 1695 string expectedFirstPage = "\n <table cellspacing=\"0\" cellpadding=\"4\" id=\"DataGrid1\" style=\"color:#333333;border-collapse:collapse;\">\r\n\t<tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td>ID</td><td>Name</td><td> </td><td> </td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl00','')\" style=\"color:White;\">ID</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl01','')\" style=\"color:White;\">Name</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl02','')\" style=\"color:White;\">Comment</a></td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>1</td><td>heh1</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>1</td><td>heh1</td><td>Comment 1</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>2</td><td>heh2</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>2</td><td>heh2</td><td>Comment 2</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>3</td><td>heh3</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>3</td><td>heh3</td><td>Comment 3</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>4</td><td>heh4</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>4</td><td>heh4</td><td>Comment 4</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>5</td><td>heh5</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>5</td><td>heh5</td><td>Comment 5</td>\r\n\t</tr><tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td>\r\n\t</tr><tr align=\"center\" style=\"color:#333333;background-color:#FFCC66;\">\r\n\t\t<td colspan=\"4\"><span>Previous</span> <a href=\"javascript:__doPostBack('DataGrid1$ctl09$ctl01','')\" style=\"color:#333333;\">Next</a></td>\r\n\t</tr>\r\n</table>"; 1696 1697 HtmlDiff.AssertAreEqual (expectedFirstPage, gridHtml, "DataGrid initial Render"); 1698 1699 FormRequest fr = new FormRequest (t.Response, "form1"); 1700 fr.Controls.Add ("__EVENTTARGET"); 1701 fr.Controls.Add ("__EVENTARGUMENT"); 1702 fr.Controls ["__EVENTTARGET"].Value = "Button1"; 1703 fr.Controls ["__EVENTARGUMENT"].Value = ""; 1704 t.Request = fr; 1705 1706 html = t.Run (); 1707 gridHtml = HtmlDiff.GetControlFromPageHtml (html); 1708 string expectedSecondPage = "\n <table cellspacing=\"0\" cellpadding=\"4\" id=\"DataGrid1\" style=\"color:#333333;border-collapse:collapse;\">\r\n\t<tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td>ID</td><td>Name</td><td> </td><td> </td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl00','')\" style=\"color:White;\">ID</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl01','')\" style=\"color:White;\">Name</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl02','')\" style=\"color:White;\">Comment</a></td>\r\n\t</tr><tr style=\"color:Navy;background-color:#FFCC66;font-weight:bold;\">\r\n\t\t<td>1</td><td>heh1</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl00','')\" style=\"color:Navy;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl01','')\" style=\"color:Navy;\">Delete</a></td><td>1</td><td>heh1</td><td>Comment 1</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>2</td><td>heh2</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>2</td><td>heh2</td><td>Comment 2</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>3</td><td>heh3</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>3</td><td>heh3</td><td>Comment 3</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>4</td><td>heh4</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>4</td><td>heh4</td><td>Comment 4</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>5</td><td>heh5</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>5</td><td>heh5</td><td>Comment 5</td>\r\n\t</tr><tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td>\r\n\t</tr><tr align=\"center\" style=\"color:#333333;background-color:#FFCC66;\">\r\n\t\t<td colspan=\"4\"><span>Previous</span> <a href=\"javascript:__doPostBack('DataGrid1$ctl09$ctl01','')\" style=\"color:#333333;\">Next</a></td>\r\n\t</tr>\r\n</table>"; 1709 HtmlDiff.AssertAreEqual (expectedSecondPage, gridHtml, "DataGrid Selected 1"); 1710 1711 fr = new FormRequest (t.Response, "form1"); 1712 fr.Controls.Add ("__EVENTTARGET"); 1713 fr.Controls.Add ("__EVENTARGUMENT"); 1714 fr.Controls ["__EVENTTARGET"].Value = "Button1"; 1715 fr.Controls ["__EVENTARGUMENT"].Value = ""; 1716 t.Request = fr; 1717 1718 html = t.Run (); 1719 gridHtml = HtmlDiff.GetControlFromPageHtml (html); 1720 string expectedThirdPage = "\n <table cellspacing=\"0\" cellpadding=\"4\" id=\"DataGrid1\" style=\"color:#333333;border-collapse:collapse;\">\r\n\t<tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td>ID</td><td>Name</td><td> </td><td> </td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl00','')\" style=\"color:White;\">ID</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl01','')\" style=\"color:White;\">Name</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl02$ctl02','')\" style=\"color:White;\">Comment</a></td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>1</td><td>heh1</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl03$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>1</td><td>heh1</td><td>Comment 1</td>\r\n\t</tr><tr style=\"color:Navy;background-color:#FFCC66;font-weight:bold;\">\r\n\t\t<td>2</td><td>heh2</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl00','')\" style=\"color:Navy;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl04$ctl01','')\" style=\"color:Navy;\">Delete</a></td><td>2</td><td>heh2</td><td>Comment 2</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>3</td><td>heh3</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl05$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>3</td><td>heh3</td><td>Comment 3</td>\r\n\t</tr><tr style=\"color:#333333;background-color:White;\">\r\n\t\t<td>4</td><td>heh4</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl06$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>4</td><td>heh4</td><td>Comment 4</td>\r\n\t</tr><tr style=\"color:#333333;background-color:#FFFBD6;\">\r\n\t\t<td>5</td><td>heh5</td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl00','')\" style=\"color:#333333;\">Edit</a></td><td><a href=\"javascript:__doPostBack('DataGrid1$ctl07$ctl01','')\" style=\"color:#333333;\">Delete</a></td><td>5</td><td>heh5</td><td>Comment 5</td>\r\n\t</tr><tr style=\"color:White;background-color:#990000;font-weight:bold;\">\r\n\t\t<td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td>\r\n\t</tr><tr align=\"center\" style=\"color:#333333;background-color:#FFCC66;\">\r\n\t\t<td colspan=\"4\"><span>Previous</span> <a href=\"javascript:__doPostBack('DataGrid1$ctl09$ctl01','')\" style=\"color:#333333;\">Next</a></td>\r\n\t</tr>\r\n</table>"; 1721 1722 HtmlDiff.AssertAreEqual (expectedThirdPage, gridHtml, "DataGrid Selected 2"); 1723 } 1724 DataGrid_OnInit(Page p)1725 public static void DataGrid_OnInit (Page p) 1726 { 1727 if (!p.IsPostBack) 1728 MyDataSource.Init (); 1729 DataGrid DataGrid1 = (DataGrid)p.FindControl ("DataGrid1"); 1730 DataGrid1.PageIndexChanged += new DataGridPageChangedEventHandler (DataGrid1_PageIndexChanged); 1731 DataGrid1.CancelCommand += new DataGridCommandEventHandler (DataGrid1_CancelCommand); 1732 DataGrid1.DeleteCommand += new DataGridCommandEventHandler (DataGrid1_DeleteCommand); 1733 DataGrid1.EditCommand += new DataGridCommandEventHandler (DataGrid1_EditCommand); 1734 DataGrid1.UpdateCommand += new DataGridCommandEventHandler (DataGrid1_UpdateCommand); 1735 DataGrid1.ItemCreated += new DataGridItemEventHandler (DataGrid1_ItemCreated); 1736 } 1737 DataGrid1_ItemCreated(object sender, DataGridItemEventArgs e)1738 public static void DataGrid1_ItemCreated (object sender, DataGridItemEventArgs e) 1739 { 1740 if (e.Item.ItemType == ListItemType.Pager) { 1741 e.Item.Cells [0].ColumnSpan = 4; 1742 } 1743 } 1744 DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e)1745 public static void DataGrid1_PageIndexChanged (object source, DataGridPageChangedEventArgs e) 1746 { 1747 DataGrid DataGrid1 = (DataGrid) source; 1748 DataGrid1.CurrentPageIndex = e.NewPageIndex; 1749 DataGrid1.DataBind (); 1750 } 1751 DataGrid1_EditCommand(object source, DataGridCommandEventArgs e)1752 public static void DataGrid1_EditCommand (object source, DataGridCommandEventArgs e) 1753 { 1754 DataGrid DataGrid1 = (DataGrid) source; 1755 DataGrid1.EditItemIndex = e.Item.ItemIndex; 1756 DataGrid1.DataBind (); 1757 } 1758 DataGrid1_DeleteCommand(object source, DataGridCommandEventArgs e)1759 public static void DataGrid1_DeleteCommand (object source, DataGridCommandEventArgs e) 1760 { 1761 DataGrid DataGrid1 = (DataGrid) source; 1762 MyDataSource ds = new MyDataSource (); 1763 ds.DeleteItem (e.Item.DataSetIndex); 1764 DataGrid1.DataBind (); 1765 } 1766 DataGrid1_UpdateCommand(object source, DataGridCommandEventArgs e)1767 public static void DataGrid1_UpdateCommand (object source, DataGridCommandEventArgs e) 1768 { 1769 DataGrid DataGrid1 = (DataGrid) source; 1770 MyDataSource ds = new MyDataSource (); 1771 TextBox edittedName = (TextBox) e.Item.Cells [1].Controls [0]; 1772 ds.UpdateItem (e.Item.DataSetIndex, Int32.Parse (e.Item.Cells [0].Text), edittedName.Text); 1773 DataGrid1.EditItemIndex = -1; 1774 DataGrid1.DataBind (); 1775 } 1776 DataGrid1_CancelCommand(object source, DataGridCommandEventArgs e)1777 public static void DataGrid1_CancelCommand (object source, DataGridCommandEventArgs e) 1778 { 1779 DataGrid DataGrid1 = (DataGrid) source; 1780 DataGrid1.EditItemIndex = -1; 1781 DataGrid1.DataBind (); 1782 } 1783 1784 public class MyDataSource 1785 { 1786 private static ArrayList _data; 1787 MyDataSource()1788 static MyDataSource () 1789 { 1790 Init (); 1791 } 1792 Init()1793 public static void Init () 1794 { 1795 _data = new ArrayList (); 1796 _data.Add (new MyDataItem (1, "heh1", "Comment 1")); 1797 _data.Add (new MyDataItem (2, "heh2", "Comment 2")); 1798 _data.Add (new MyDataItem (3, "heh3", "Comment 3")); 1799 _data.Add (new MyDataItem (4, "heh4", "Comment 4")); 1800 _data.Add (new MyDataItem (5, "heh5", "Comment 5")); 1801 _data.Add (new MyDataItem (6, "heh6", "Comment 6")); 1802 _data.Add (new MyDataItem (7, "heh7", "Comment 7")); 1803 _data.Add (new MyDataItem (8, "heh8", "Comment 8")); 1804 _data.Add (new MyDataItem (9, "heh9", "Comment 9")); 1805 _data.Add (new MyDataItem (10, "heh10", "Comment 10")); 1806 } 1807 MyDataSource()1808 public MyDataSource () 1809 { 1810 } 1811 GetAllItems()1812 public ArrayList GetAllItems () 1813 { 1814 return _data; 1815 } 1816 GetCount()1817 public int GetCount () 1818 { 1819 return _data.Count; 1820 } 1821 UpdateItem(int itemIndex, int id, string name)1822 public void UpdateItem (int itemIndex, int id, string name) 1823 { 1824 if (itemIndex >= 0 && itemIndex < _data.Count) { 1825 MyDataItem item = (MyDataItem) _data [itemIndex]; 1826 item.Name = name; 1827 return; 1828 } 1829 } 1830 DeleteItem(int p)1831 public void DeleteItem (int p) 1832 { 1833 _data.RemoveAt (p); 1834 } 1835 } 1836 1837 public class MyDataItem 1838 { 1839 int _id = 0; 1840 string _name = ""; 1841 string _comment = ""; 1842 MyDataItem(int id, string name, string comment)1843 public MyDataItem (int id, string name, string comment) 1844 { 1845 _id = id; 1846 _name = name; 1847 _comment = comment; 1848 } 1849 1850 public int ID { 1851 get { return _id; } 1852 } 1853 1854 public string Name { 1855 get { return _name; } 1856 set { _name = value; } 1857 } 1858 1859 public string Comment { 1860 get { return _comment; } 1861 set { _comment = value; } 1862 } 1863 } 1864 1865 1866 class MyTemplate : ITemplate { 1867 string text; MyTemplate(string text)1868 public MyTemplate (string text) 1869 { 1870 this.text = text; 1871 } 1872 InstantiateIn(Control control)1873 public void InstantiateIn (Control control) 1874 { 1875 control.Controls.Add (new LiteralControl (text)); 1876 } 1877 } 1878 1879 [Test] OneTemplateColumn1()1880 public void OneTemplateColumn1 () 1881 { 1882 DataGridPoker p = new DataGridPoker (); 1883 TemplateColumn tc = new TemplateColumn (); 1884 tc.ItemTemplate = new MyTemplate ("hola"); 1885 p.Columns.Add (tc); 1886 ControlCollection controls = p.Controls; 1887 p.CreateControls (true); 1888 Assert.AreEqual (1, p.Columns.Count, "columns"); 1889 Assert.AreEqual (0, controls.Count, "controls"); 1890 string render = p.Render (); 1891 // no items, even with a templated column. 1892 // The table is not added if DataSource == null 1893 Assert.IsTrue (-1 == render.IndexOf ("hola"), "template"); 1894 } 1895 1896 [Test] OneTemplateColumn2()1897 public void OneTemplateColumn2 () 1898 { 1899 DataGridPoker p = new DataGridPoker (); 1900 p.ShowFooter = true; 1901 p.AutoGenerateColumns = false; 1902 p.DataSource = new ArrayList (); 1903 TemplateColumn tc = new TemplateColumn (); 1904 tc.HeaderText = " "; 1905 tc.FooterTemplate = new MyTemplate ("hola"); 1906 p.Columns.Add (tc); 1907 Assert.AreEqual (1, p.Columns.Count, "columns-1"); 1908 Assert.AreEqual (0, p.Controls.Count, "controls-1"); 1909 p.CreateControls (true); 1910 // This time we have the table there. Thanks to the empty ArrayList 1911 Assert.AreEqual (1, p.Columns.Count, "columns-2"); 1912 Assert.AreEqual (1, p.Controls.Count, "controls-2"); 1913 p.PrepareCH (); 1914 Assert.AreEqual (1, p.Columns.Count, "columns-3"); 1915 Assert.AreEqual (1, p.Controls.Count, "controls-3"); 1916 } 1917 1918 [Test] OneTemplateColumn3()1919 public void OneTemplateColumn3 () 1920 { 1921 DataGridPoker p = new DataGridPoker (); 1922 p.ShowFooter = true; 1923 p.AutoGenerateColumns = false; 1924 p.DataSource = new ArrayList (); 1925 TemplateColumn tc = new TemplateColumn (); 1926 tc.FooterTemplate = new MyTemplate ("hola"); 1927 p.Columns.Add (tc); 1928 p.DataBind (); 1929 1930 StringWriter sw = new StringWriter (); 1931 HtmlTextWriter tw = new HtmlTextWriter (sw); 1932 Assert.AreEqual (1, p.Columns.Count, "columns"); 1933 Assert.AreEqual (1, p.Controls.Count, "controls"); 1934 1935 string render = p.Render (); 1936 // no items, but we have a footer 1937 Assert.IsTrue (-1 != render.IndexOf ("hola"), "template"); 1938 } 1939 1940 // This one throw nullref on MS and works with mono 1941 /* 1942 [Test] 1943 [NUnit.Framework.CategoryAttribute ("NotDotNet")] 1944 public void OneTemplateColumn4 () 1945 { 1946 DataGridPoker p = new DataGridPoker (); 1947 TemplateColumn tc = new TemplateColumn (); 1948 tc.ItemTemplate = new MyTemplate ("hola"); 1949 p.Columns.Add (tc); 1950 p.DataSource = new ArrayList (); 1951 p.CreateControls (false); 1952 Assert.AreEqual (1, p.Columns.Count, "columns"); 1953 // Table added because useDataSource == false... 1954 Assert.AreEqual (1, p.Controls.Count, "controls"); 1955 string render = p.Render (); 1956 // ... but no template rendered. 1957 Assert.IsTrue (-1 == render.IndexOf ("hola"), "template"); 1958 } 1959 */ 1960 1961 [Test] CreateControls()1962 public void CreateControls () 1963 { 1964 DataGridPoker p = new DataGridPoker (); 1965 DataTable table = new DataTable (); 1966 1967 table.Columns.Add (new DataColumn ("one", typeof (string))); 1968 table.Columns.Add (new DataColumn ("two", typeof (string))); 1969 table.Columns.Add (new DataColumn ("three", typeof (string))); 1970 table.Rows.Add (new object [] { "1", "2", "3" }); 1971 1972 p.DataSource = new DataView (table); 1973 1974 p.CreateControls (true); 1975 Assert.AreEqual (p.Controls.Count, 1, "A1"); 1976 1977 ShowControlsRecursive (p.Controls [0], 1); 1978 } 1979 1980 [Test] CreationEvents()1981 public void CreationEvents () 1982 { 1983 DataGridPoker p = new DataGridPoker (); 1984 DataTable table = new DataTable (); 1985 1986 table.Columns.Add (new DataColumn ("one", typeof (string))); 1987 table.Columns.Add (new DataColumn ("two", typeof (string))); 1988 table.Columns.Add (new DataColumn ("three", typeof (string))); 1989 1990 p.DataSource = new DataView (table); 1991 1992 p.ItemCreated += new DataGridItemEventHandler (ItemCreatedHandler); 1993 p.ItemDataBound += new DataGridItemEventHandler (ItemDataBoundHandler); 1994 1995 // No items added yet 1996 ResetEvents (); 1997 p.CreateControls (true); 1998 Assert.IsTrue (item_created, "A1"); 1999 Assert.IsTrue (item_data_bound, "A2"); 2000 2001 table.Rows.Add (new object [] { "1", "2", "3" }); 2002 2003 ResetEvents (); 2004 p.CreateControls (true); 2005 Assert.IsTrue (item_created, "A3"); 2006 Assert.IsTrue (item_data_bound, "A4"); 2007 2008 // no databinding 2009 ResetEvents (); 2010 p.CreateControls (false); 2011 Assert.IsTrue (item_created, "A5"); 2012 Assert.IsFalse (item_data_bound, "A6"); 2013 } 2014 2015 [Test] InitializePager()2016 public void InitializePager () 2017 { 2018 DataGridPoker p = new DataGridPoker (); 2019 PagedDataSource paged = new PagedDataSource (); 2020 DataTable table = new DataTable (); 2021 DataGridItem item = new DataGridItem (-1, -1, ListItemType.Pager); 2022 ArrayList columns; 2023 LinkButton next; 2024 LinkButton prev; 2025 2026 table.Columns.Add (new DataColumn ("one", typeof (string))); 2027 table.Columns.Add (new DataColumn ("two", typeof (string))); 2028 table.Columns.Add (new DataColumn ("three", typeof (string))); 2029 2030 for (int i = 0; i < 25; i++) 2031 table.Rows.Add (new object [] { "1", "2", "3" }); 2032 paged.DataSource = new DataView (table); 2033 2034 columns = p.CreateColumns (paged, true); 2035 p.InitPager (item, columns.Count, paged); 2036 2037 // 2038 // No where to go 2039 // 2040 2041 Assert.AreEqual (item.Controls.Count, 1, "A1"); 2042 Assert.AreEqual (item.Controls [0].GetType (), typeof (TableCell), "A2"); 2043 Assert.AreEqual (item.Controls [0].Controls.Count, 3, "A3"); 2044 Assert.AreEqual (item.Controls [0].Controls [0].GetType (), typeof (Label), "A4"); 2045 Assert.AreEqual (item.Controls [0].Controls [1].GetType (), 2046 typeof (LiteralControl), "A5"); 2047 Assert.AreEqual (item.Controls [0].Controls [2].GetType (), typeof (Label), "A6"); 2048 Assert.AreEqual (((Label) item.Controls [0].Controls [0]).Text, "<", "A7"); 2049 Assert.AreEqual (((LiteralControl) item.Controls [0].Controls [1]).Text, 2050 " ", "A7"); 2051 Assert.AreEqual (((Label) item.Controls [0].Controls [2]).Text, ">", "A8"); 2052 2053 // 2054 // Next 2055 // 2056 2057 item = new DataGridItem (-1, -1, ListItemType.Pager); 2058 paged.PageSize = 5; 2059 paged.VirtualCount = 25; 2060 paged.AllowPaging = true; 2061 p.InitPager (item, columns.Count, paged); 2062 2063 Assert.AreEqual (item.Controls.Count, 1, "A9"); 2064 Assert.AreEqual (item.Controls [0].GetType (), typeof (TableCell), "A10"); 2065 Assert.AreEqual (item.Controls [0].Controls.Count, 3, "A11"); 2066 Assert.AreEqual (item.Controls [0].Controls [0].GetType (), typeof (Label), "A12"); 2067 Assert.AreEqual (item.Controls [0].Controls [1].GetType (), 2068 typeof (LiteralControl), "A13"); 2069 Assert.AreEqual (((Label) item.Controls [0].Controls [0]).Text, "<", "A14"); 2070 Assert.AreEqual (((LiteralControl) item.Controls [0].Controls [1]).Text, 2071 " ", "A16"); 2072 2073 next = (LinkButton) item.Controls [0].Controls [2]; 2074 Assert.AreEqual (next.Text, ">", "A17"); 2075 Assert.AreEqual (next.CommandName, "Page", "A18"); 2076 Assert.AreEqual (next.CommandArgument, "Next", "A19"); 2077 2078 2079 // 2080 // Both 2081 // 2082 2083 item = new DataGridItem (-1, -1, ListItemType.Pager); 2084 paged.PageSize = 5; 2085 paged.VirtualCount = 25; 2086 paged.AllowPaging = true; 2087 paged.CurrentPageIndex = 2; 2088 p.InitPager (item, columns.Count, paged); 2089 2090 Assert.AreEqual (item.Controls.Count, 1, "A20"); 2091 Assert.AreEqual (item.Controls [0].GetType (), typeof (TableCell), "A21"); 2092 Assert.AreEqual (item.Controls [0].Controls.Count, 3, "A22"); 2093 Assert.AreEqual (item.Controls [0].Controls [1].GetType (), 2094 typeof (LiteralControl), "A23"); 2095 Assert.AreEqual (((LiteralControl) item.Controls [0].Controls [1]).Text, 2096 " ", "A24"); 2097 2098 // This is failing with an invalidcast right now. It's something related to 2099 // the pager thinking that it's on the last page and rendering a label instead 2100 next = (LinkButton) item.Controls [0].Controls [2]; 2101 Assert.AreEqual (next.Text, ">", "A25"); 2102 Assert.AreEqual (next.CommandName, "Page", "A26"); 2103 Assert.AreEqual (next.CommandArgument, "Next", "A27"); 2104 2105 prev = (LinkButton) item.Controls [0].Controls [0]; 2106 Assert.AreEqual (prev.Text, "<", "A28"); 2107 Assert.AreEqual (prev.CommandName, "Page", "A29"); 2108 Assert.AreEqual (prev.CommandArgument, "Prev", "A30"); 2109 2110 // 2111 // Back only 2112 // 2113 2114 item = new DataGridItem (-1, -1, ListItemType.Pager); 2115 paged.PageSize = 5; 2116 paged.VirtualCount = 25; 2117 paged.AllowPaging = true; 2118 paged.CurrentPageIndex = 4; 2119 p.InitPager (item, columns.Count, paged); 2120 2121 Assert.AreEqual (item.Controls.Count, 1, "A31"); 2122 Assert.AreEqual (item.Controls [0].GetType (), typeof (TableCell), "A32"); 2123 Assert.AreEqual (item.Controls [0].Controls.Count, 3, "A33"); 2124 Assert.AreEqual (item.Controls [0].Controls [1].GetType (), 2125 typeof (LiteralControl), "A34"); 2126 Assert.AreEqual (item.Controls [0].Controls [2].GetType (), typeof (Label), "A35"); 2127 Assert.AreEqual (((LiteralControl) item.Controls [0].Controls [1]).Text, 2128 " ", "A36"); 2129 Assert.AreEqual (((Label) item.Controls [0].Controls [2]).Text, ">", "A37"); 2130 2131 prev = (LinkButton) item.Controls [0].Controls [0]; 2132 Assert.AreEqual (prev.Text, "<", "A38"); 2133 Assert.AreEqual (prev.CommandName, "Page", "A39"); 2134 Assert.AreEqual (prev.CommandArgument, "Prev", "A40"); 2135 2136 } 2137 2138 [Conditional ("VERBOSE_DATAGRID")] ShowControlsRecursive(Control c, int depth)2139 private void ShowControlsRecursive (Control c, int depth) 2140 { 2141 for (int i = 0; i < depth; i++) 2142 Console.Write ("-"); 2143 2144 // StringWriter sw = new StringWriter (); 2145 // HtmlTextWriter tw = new HtmlTextWriter (sw); 2146 2147 // c.RenderControl (tw); 2148 // Console.WriteLine (sw.ToString ()); 2149 2150 Console.WriteLine (c); 2151 2152 foreach (Control child in c.Controls) 2153 ShowControlsRecursive (child, depth + 5); 2154 } 2155 2156 [Test] Render()2157 public void Render () 2158 { 2159 DataGridPoker p = new DataGridPoker (); 2160 2161 Assert.AreEqual (p.Render (), String.Empty, "A1"); 2162 } 2163 FindByType(Control parent, Type type)2164 Control FindByType (Control parent, Type type) 2165 { 2166 if (!parent.HasControls ()) 2167 return null; 2168 2169 foreach (Control c in parent.Controls) { 2170 if (type.IsAssignableFrom (c.GetType ())) 2171 return c; 2172 2173 Control ret = FindByType (c, type); 2174 if (ret != null) 2175 return ret; 2176 } 2177 return null; 2178 } 2179 2180 // Header link 2181 [Test] SpecialLinkButton1()2182 public void SpecialLinkButton1 () 2183 { 2184 DataTable dt = new DataTable(); 2185 dt.Columns.Add (new DataColumn("something", typeof(Int32))); 2186 DataRow dr = dt.NewRow (); 2187 dt.Rows.Add (new object [] { 1 }); 2188 DataView dv = new DataView (dt); 2189 DataGridPoker dg = new DataGridPoker (); 2190 dg.AllowSorting = true; 2191 dg.HeaderStyle.Font.Bold = true; 2192 dg.HeaderStyle.ForeColor = Color.FromArgb (255,255,255,255); 2193 dg.HeaderStyle.BackColor = Color.FromArgb (33,33,33,33); 2194 dg.DataSource = dv; 2195 dg.DataBind (); 2196 LinkButton lb = (LinkButton) FindByType (dg.Controls [0], typeof (LinkButton)); 2197 Assert.IsNotNull (lb, "lb"); 2198 StringWriter sr = new StringWriter (); 2199 HtmlTextWriter output = new HtmlTextWriter (sr); 2200 // Nothing here... 2201 Assert.AreEqual (Color.Empty, lb.ControlStyle.ForeColor, "fore"); 2202 lb.RenderControl (output); 2203 // Nothing here... 2204 Assert.AreEqual (Color.Empty, lb.ControlStyle.ForeColor, "fore2"); 2205 dg.Render (); 2206 // Surprise! after rendering the datagrid, the linkbutton has the ForeColor from the datagrid 2207 Assert.AreEqual (Color.FromArgb (255,255,255,255), lb.ControlStyle.ForeColor, "fore3"); 2208 2209 // Extra. Items != empty 2210 Assert.AreEqual (1, dg.Items.Count, "itemCount"); 2211 } 2212 2213 // value link in buttoncolumn 2214 [Test] SpecialLinkButton2()2215 public void SpecialLinkButton2 () 2216 { 2217 DataTable dt = new DataTable(); 2218 dt.Columns.Add (new DataColumn("string_col", typeof(string))); 2219 DataRow dr = dt.NewRow (); 2220 dt.Rows.Add (new object [] { "Item 1" }); 2221 DataView dv = new DataView (dt); 2222 2223 DataGridPoker dg = new DataGridPoker (); 2224 dg.DataSource = dv; 2225 dg.AutoGenerateColumns = false; 2226 dg.HeaderStyle.ForeColor = Color.FromArgb (255,255,255,255); 2227 dg.HeaderStyle.BackColor = Color.FromArgb (33,33,33,33); 2228 2229 ButtonColumn bc = new ButtonColumn (); 2230 bc.HeaderText = "Some header"; 2231 bc.DataTextField = "string_col"; 2232 bc.CommandName = "lalala"; 2233 dg.Columns.Add (bc); 2234 2235 BoundColumn bound = new BoundColumn (); 2236 bound.HeaderText = "The other column"; 2237 bound.DataField = "string_col"; 2238 dg.Columns.Add (bound); 2239 2240 dg.DataBind (); 2241 2242 LinkButton lb = (LinkButton) FindByType (dg.Controls [0], typeof (LinkButton)); 2243 Assert.IsNotNull (lb, "lb"); 2244 StringWriter sr = new StringWriter (); 2245 HtmlTextWriter output = new HtmlTextWriter (sr); 2246 Assert.AreEqual (Color.Empty, lb.ControlStyle.ForeColor, "fore"); 2247 lb.RenderControl (output); 2248 Assert.AreEqual (Color.Empty, lb.ControlStyle.ForeColor, "fore2"); 2249 string str = dg.Render (); 2250 Assert.IsTrue (-1 != str.IndexOf ("<a>Item 1</a>"), "item1"); 2251 Assert.IsTrue (-1 != str.IndexOf ("<td>Item 1</td>"), "item1-2"); 2252 } 2253 } 2254 } 2255 2256