System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c2c984f37062a7ea6ba93e9518fa6b86d080bb12:


0000: ef bb bf 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.com). * . 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a   risk!. ********
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 51 4c  /..namespace SQL
0130: 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 44 65 73  ite.Designer.Des
0140: 69 67 6e 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79  ign.{.  using Sy
0150: 73 74 65 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79  stem;.  using Sy
0160: 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73  stem.Collections
0170: 2e 47 65 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e  .Generic;.  usin
0180: 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74  g System.Collect
0190: 69 6f 6e 73 3b 0a 20 20 75 73 69 6e 67 20 53 79  ions;.  using Sy
01a0: 73 74 65 6d 2e 54 65 78 74 3b 0a 20 20 75 73 69  stem.Text;.  usi
01b0: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e  ng System.Compon
01c0: 65 6e 74 4d 6f 64 65 6c 3b 0a 20 20 75 73 69 6e  entModel;.  usin
01d0: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20  g System.Data;. 
01e0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
01f0: 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a 20 20 75 73 69  ta.Common;.  usi
0200: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e  ng System.Compon
0210: 65 6e 74 4d 6f 64 65 6c 2e 44 65 73 69 67 6e 3b  entModel.Design;
0220: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0230: 44 72 61 77 69 6e 67 2e 44 65 73 69 67 6e 3b 0a  Drawing.Design;.
0240: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57    using System.W
0250: 69 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0a 20 20  indows.Forms;.  
0260: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 53 65 63  using System.Sec
0270: 75 72 69 74 79 2e 50 65 72 6d 69 73 73 69 6f 6e  urity.Permission
0280: 73 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  s;.  using Syste
0290: 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e 3b  m.Globalization;
02a0: 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61  ..  internal cla
02b0: 73 73 20 49 6e 64 65 78 45 64 69 74 6f 72 20 3a  ss IndexEditor :
02c0: 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64 69 74 6f   CollectionEdito
02d0: 72 0a 20 20 7b 0a 20 20 20 20 54 61 62 6c 65 20  r.  {.    Table 
02e0: 5f 74 61 62 6c 65 3b 0a 20 20 20 20 43 6f 6c 6c  _table;.    Coll
02f0: 65 63 74 69 6f 6e 45 64 69 74 6f 72 2e 43 6f 6c  ectionEditor.Col
0300: 6c 65 63 74 69 6f 6e 46 6f 72 6d 20 5f 66 6f 72  lectionForm _for
0310: 6d 3b 0a 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20  m;.    object[] 
0320: 5f 69 74 65 6d 73 3b 0a 20 20 20 20 6f 62 6a 65  _items;.    obje
0330: 63 74 5b 5d 20 5f 6f 72 69 67 3b 0a 20 20 20 20  ct[] _orig;.    
0340: 69 6e 74 20 5f 63 6f 75 6e 74 3b 0a 0a 20 20 20  int _count;..   
0350: 20 69 6e 74 65 72 6e 61 6c 20 49 6e 64 65 78 45   internal IndexE
0360: 64 69 74 6f 72 28 54 61 62 6c 65 20 70 61 72 65  ditor(Table pare
0370: 6e 74 29 0a 20 20 20 20 20 20 3a 20 62 61 73 65  nt).      : base
0380: 28 74 79 70 65 6f 66 28 4c 69 73 74 3c 49 6e 64  (typeof(List<Ind
0390: 65 78 3e 29 29 0a 20 20 20 20 7b 0a 20 20 20 20  ex>)).    {.    
03a0: 20 20 5f 74 61 62 6c 65 20 3d 20 70 61 72 65 6e    _table = paren
03b0: 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  t;.    }..    pr
03c0: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
03d0: 20 6f 62 6a 65 63 74 5b 5d 20 47 65 74 49 74 65   object[] GetIte
03e0: 6d 73 28 6f 62 6a 65 63 74 20 65 64 69 74 56 61  ms(object editVa
03f0: 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  lue).    {.     
0400: 20 69 66 20 28 5f 69 74 65 6d 73 20 3d 3d 20 6e   if (_items == n
0410: 75 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20 20 20  ull).      {.   
0420: 20 20 20 20 20 4c 69 73 74 3c 49 6e 64 65 78 3e       List<Index>
0430: 20 76 61 6c 75 65 20 3d 20 65 64 69 74 56 61 6c   value = editVal
0440: 75 65 20 61 73 20 4c 69 73 74 3c 49 6e 64 65 78  ue as List<Index
0450: 3e 3b 0a 0a 20 20 20 20 20 20 20 20 69 6e 74 20  >;..        int 
0460: 65 78 74 72 61 20 3d 20 28 5f 74 61 62 6c 65 2e  extra = (_table.
0470: 50 72 69 6d 61 72 79 4b 65 79 2e 43 6f 6c 75 6d  PrimaryKey.Colum
0480: 6e 73 2e 43 6f 75 6e 74 20 3e 20 30 29 20 3f 20  ns.Count > 0) ? 
0490: 31 20 3a 20 30 3b 0a 0a 20 20 20 20 20 20 20 20  1 : 0;..        
04a0: 5f 69 74 65 6d 73 20 3d 20 6e 65 77 20 6f 62 6a  _items = new obj
04b0: 65 63 74 5b 76 61 6c 75 65 2e 43 6f 75 6e 74 20  ect[value.Count 
04c0: 2b 20 65 78 74 72 61 5d 3b 0a 20 20 20 20 20 20  + extra];.      
04d0: 20 20 5f 6f 72 69 67 20 3d 20 6e 65 77 20 6f 62    _orig = new ob
04e0: 6a 65 63 74 5b 5f 69 74 65 6d 73 2e 4c 65 6e 67  ject[_items.Leng
04f0: 74 68 5d 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  th];.        for
0500: 20 28 69 6e 74 20 6e 20 3d 20 65 78 74 72 61 3b   (int n = extra;
0510: 20 6e 20 3c 20 5f 69 74 65 6d 73 2e 4c 65 6e 67   n < _items.Leng
0520: 74 68 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 20  th; n++).       
0530: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 5f 69 74   {.          _it
0540: 65 6d 73 5b 6e 5d 20 3d 20 28 28 49 43 6c 6f 6e  ems[n] = ((IClon
0550: 65 61 62 6c 65 29 76 61 6c 75 65 5b 6e 20 2d 20  eable)value[n - 
0560: 65 78 74 72 61 5d 29 2e 43 6c 6f 6e 65 28 29 3b  extra]).Clone();
0570: 0a 20 20 20 20 20 20 20 20 20 20 5f 6f 72 69 67  .          _orig
0580: 5b 6e 5d 20 3d 20 76 61 6c 75 65 5b 6e 20 2d 20  [n] = value[n - 
0590: 65 78 74 72 61 5d 3b 0a 20 20 20 20 20 20 20 20  extra];.        
05a0: 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 65  }..        if (e
05b0: 78 74 72 61 20 3e 20 30 29 0a 20 20 20 20 20 20  xtra > 0).      
05c0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 5f 69    {.          _i
05d0: 74 65 6d 73 5b 30 5d 20 3d 20 28 28 49 43 6c 6f  tems[0] = ((IClo
05e0: 6e 65 61 62 6c 65 29 5f 74 61 62 6c 65 2e 50 72  neable)_table.Pr
05f0: 69 6d 61 72 79 4b 65 79 29 2e 43 6c 6f 6e 65 28  imaryKey).Clone(
0600: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 5f 6f 72  );.          _or
0610: 69 67 5b 30 5d 20 3d 20 5f 74 61 62 6c 65 2e 50  ig[0] = _table.P
0620: 72 69 6d 61 72 79 4b 65 79 3b 0a 20 20 20 20 20  rimaryKey;.     
0630: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 5f 63     }..        _c
0640: 6f 75 6e 74 20 3d 20 5f 69 74 65 6d 73 2e 4c 65  ount = _items.Le
0650: 6e 67 74 68 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ngth;.      }.  
0660: 20 20 20 20 72 65 74 75 72 6e 20 5f 69 74 65 6d      return _item
0670: 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  s;.    }..    pr
0680: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
0690: 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64 69 74 6f   CollectionEdito
06a0: 72 2e 43 6f 6c 6c 65 63 74 69 6f 6e 46 6f 72 6d  r.CollectionForm
06b0: 20 43 72 65 61 74 65 43 6f 6c 6c 65 63 74 69 6f   CreateCollectio
06c0: 6e 46 6f 72 6d 28 29 0a 20 20 20 20 7b 0a 20 20  nForm().    {.  
06d0: 20 20 20 20 5f 66 6f 72 6d 20 3d 20 62 61 73 65      _form = base
06e0: 2e 43 72 65 61 74 65 43 6f 6c 6c 65 63 74 69 6f  .CreateCollectio
06f0: 6e 46 6f 72 6d 28 29 3b 0a 20 20 20 20 20 20 5f  nForm();.      _
0700: 66 6f 72 6d 2e 54 65 78 74 20 3d 20 22 49 6e 64  form.Text = "Ind
0710: 65 78 20 45 64 69 74 6f 72 22 3b 0a 0a 20 20 20  ex Editor";..   
0720: 20 20 20 2f 2a 20 44 6f 69 6e 67 20 74 68 69 73     /* Doing this
0730: 20 62 65 63 61 75 73 65 20 49 20 63 61 6e 27 74   because I can't
0740: 20 66 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20   figure out how 
0750: 74 6f 20 67 65 74 20 74 68 65 20 43 6f 6c 75 6d  to get the Colum
0760: 6e 73 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 65 64  ns collection ed
0770: 69 74 6f 72 20 74 6f 20 6e 6f 74 69 66 79 20 74  itor to notify t
0780: 68 69 73 20 65 64 69 74 6f 72 20 77 68 65 6e 20  his editor when 
0790: 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 69  a column of an i
07a0: 6e 64 65 78 20 69 73 20 75 70 64 61 74 65 64 2e  ndex is updated.
07b0: 0a 20 20 20 20 20 20 20 20 20 54 68 69 73 20 66  .         This f
07c0: 6f 72 63 65 73 20 74 68 65 20 63 6f 6c 6c 65 63  orces the collec
07d0: 74 69 6f 6e 20 65 64 69 74 6f 72 20 66 6f 72 6d  tion editor form
07e0: 20 74 6f 20 62 65 20 22 64 69 72 74 79 22 20 77   to be "dirty" w
07f0: 68 69 63 68 20 63 61 6c 6c 73 20 53 65 74 49 74  hich calls SetIt
0800: 65 6d 73 28 29 20 77 68 65 6e 20 79 6f 75 20 68  ems() when you h
0810: 69 74 20 4f 4b 20 6f 72 20 63 61 6e 63 65 6c 2e  it OK or cancel.
0820: 20 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20    Otherwise, if 
0830: 79 6f 75 0a 20 20 20 20 20 20 20 20 20 63 68 61  you.         cha
0840: 6e 67 65 20 61 20 63 6f 6c 75 6d 6e 20 61 72 6f  nge a column aro
0850: 75 6e 64 20 61 6e 64 20 68 69 74 20 4f 4b 2c 20  und and hit OK, 
0860: 74 68 65 6e 20 68 69 74 20 4f 4b 20 6f 6e 20 74  then hit OK on t
0870: 68 69 73 20 65 64 69 74 6f 72 2c 20 69 74 20 77  his editor, it w
0880: 6f 6e 27 74 20 62 65 20 64 69 72 74 79 20 61 6e  on't be dirty an
0890: 64 20 77 6f 6e 27 74 20 75 70 64 61 74 65 2e 20  d won't update. 
08a0: 2a 2f 0a 20 20 20 20 20 20 74 72 79 0a 20 20 20  */.      try.   
08b0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 5f 66 6f     {.        _fo
08c0: 72 6d 2e 47 65 74 54 79 70 65 28 29 2e 49 6e 76  rm.GetType().Inv
08d0: 6f 6b 65 4d 65 6d 62 65 72 28 22 64 69 72 74 79  okeMember("dirty
08e0: 22 2c 20 53 79 73 74 65 6d 2e 52 65 66 6c 65 63  ", System.Reflec
08f0: 74 69 6f 6e 2e 42 69 6e 64 69 6e 67 46 6c 61 67  tion.BindingFlag
0900: 73 2e 4e 6f 6e 50 75 62 6c 69 63 20 7c 20 53 79  s.NonPublic | Sy
0910: 73 74 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 2e  stem.Reflection.
0920: 42 69 6e 64 69 6e 67 46 6c 61 67 73 2e 49 6e 73  BindingFlags.Ins
0930: 74 61 6e 63 65 20 7c 20 53 79 73 74 65 6d 2e 52  tance | System.R
0940: 65 66 6c 65 63 74 69 6f 6e 2e 42 69 6e 64 69 6e  eflection.Bindin
0950: 67 46 6c 61 67 73 2e 53 65 74 46 69 65 6c 64 2c  gFlags.SetField,
0960: 20 6e 75 6c 6c 2c 20 5f 66 6f 72 6d 2c 20 6e 65   null, _form, ne
0970: 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 74 72 75  w object[] { tru
0980: 65 20 7d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  e });.      }.  
0990: 20 20 20 20 63 61 74 63 68 0a 20 20 20 20 20 20      catch.      
09a0: 7b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  {.      }..     
09b0: 20 66 6f 72 65 61 63 68 20 28 43 6f 6e 74 72 6f   foreach (Contro
09c0: 6c 20 63 20 69 6e 20 5f 66 6f 72 6d 2e 43 6f 6e  l c in _form.Con
09d0: 74 72 6f 6c 73 5b 30 5d 2e 43 6f 6e 74 72 6f 6c  trols[0].Control
09e0: 73 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  s).      {.     
09f0: 20 20 20 50 72 6f 70 65 72 74 79 47 72 69 64 20     PropertyGrid 
0a00: 67 72 69 64 20 3d 20 63 20 61 73 20 50 72 6f 70  grid = c as Prop
0a10: 65 72 74 79 47 72 69 64 3b 0a 20 20 20 20 20 20  ertyGrid;.      
0a20: 20 20 69 66 20 28 67 72 69 64 20 21 3d 20 6e 75    if (grid != nu
0a30: 6c 6c 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  ll).        {.  
0a40: 20 20 20 20 20 20 20 20 67 72 69 64 2e 48 65 6c          grid.Hel
0a50: 70 56 69 73 69 62 6c 65 20 3d 20 74 72 75 65 3b  pVisible = true;
0a60: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
0a70: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0a80: 20 20 7d 0a 20 20 20 20 20 20 5f 66 6f 72 6d 2e    }.      _form.
0a90: 57 69 64 74 68 20 3d 20 28 69 6e 74 29 28 5f 66  Width = (int)(_f
0aa0: 6f 72 6d 2e 57 69 64 74 68 20 2a 20 31 2e 32 35  orm.Width * 1.25
0ab0: 29 3b 0a 20 20 20 20 20 20 5f 66 6f 72 6d 2e 48  );.      _form.H
0ac0: 65 69 67 68 74 20 3d 20 28 69 6e 74 29 28 5f 66  eight = (int)(_f
0ad0: 6f 72 6d 2e 48 65 69 67 68 74 20 2a 20 31 2e 32  orm.Height * 1.2
0ae0: 35 29 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72  5);..      retur
0af0: 6e 20 5f 66 6f 72 6d 3b 0a 20 20 20 20 7d 0a 0a  n _form;.    }..
0b00: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76      protected ov
0b10: 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 43 72  erride object Cr
0b20: 65 61 74 65 49 6e 73 74 61 6e 63 65 28 54 79 70  eateInstance(Typ
0b30: 65 20 69 74 65 6d 54 79 70 65 29 0a 20 20 20 20  e itemType).    
0b40: 7b 0a 20 20 20 20 20 20 69 66 20 28 69 74 65 6d  {.      if (item
0b50: 54 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 49  Type == typeof(I
0b60: 6e 64 65 78 29 29 0a 20 20 20 20 20 20 7b 0a 20  ndex)).      {. 
0b70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
0b80: 77 20 49 6e 64 65 78 28 6e 75 6c 6c 2c 20 5f 74  w Index(null, _t
0b90: 61 62 6c 65 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20  able, null);.   
0ba0: 20 20 20 7d 0a 20 20 20 20 20 20 74 68 72 6f 77     }.      throw
0bb0: 20 6e 65 77 20 4e 6f 74 53 75 70 70 6f 72 74 65   new NotSupporte
0bc0: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0a 20 20  dException();.  
0bd0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63 74    }..    protect
0be0: 65 64 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ed override bool
0bf0: 20 43 61 6e 52 65 6d 6f 76 65 49 6e 73 74 61 6e   CanRemoveInstan
0c00: 63 65 28 6f 62 6a 65 63 74 20 76 61 6c 75 65 29  ce(object value)
0c10: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
0c20: 75 72 6e 20 21 28 76 61 6c 75 65 20 69 73 20 50  urn !(value is P
0c30: 72 69 6d 61 72 79 4b 65 79 29 3b 0a 20 20 20 20  rimaryKey);.    
0c40: 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  }..    protected
0c50: 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
0c60: 20 53 65 74 49 74 65 6d 73 28 6f 62 6a 65 63 74   SetItems(object
0c70: 20 65 64 69 74 56 61 6c 75 65 2c 20 6f 62 6a 65   editValue, obje
0c80: 63 74 5b 5d 20 76 61 6c 75 65 29 0a 20 20 20 20  ct[] value).    
0c90: 7b 0a 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72  {.      bool dir
0ca0: 74 79 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20  ty = false;.    
0cb0: 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 30 3b    int count = 0;
0cc0: 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 66 6f 72  ..      if (_for
0cd0: 6d 2e 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 3d  m.DialogResult =
0ce0: 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 2e 43  = DialogResult.C
0cf0: 61 6e 63 65 6c 29 0a 20 20 20 20 20 20 20 20 76  ancel).        v
0d00: 61 6c 75 65 20 3d 20 5f 6f 72 69 67 3b 0a 0a 20  alue = _orig;.. 
0d10: 20 20 20 20 20 69 66 20 28 65 64 69 74 56 61 6c       if (editVal
0d20: 75 65 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  ue != null).    
0d30: 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28    {.        if (
0d40: 21 28 65 64 69 74 56 61 6c 75 65 20 69 73 20 49  !(editValue is I
0d50: 4c 69 73 74 29 29 0a 20 20 20 20 20 20 20 20 7b  List)).        {
0d60: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
0d70: 6e 20 65 64 69 74 56 61 6c 75 65 3b 0a 20 20 20  n editValue;.   
0d80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 49       }.        I
0d90: 4c 69 73 74 20 6c 69 73 74 20 3d 20 28 49 4c 69  List list = (ILi
0da0: 73 74 29 65 64 69 74 56 61 6c 75 65 3b 0a 20 20  st)editValue;.  
0db0: 20 20 20 20 20 20 6c 69 73 74 2e 43 6c 65 61 72        list.Clear
0dc0: 28 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 20  ();.        for 
0dd0: 28 69 6e 74 20 69 20 3d 20 30 3b 20 69 20 3c 20  (int i = 0; i < 
0de0: 76 61 6c 75 65 2e 4c 65 6e 67 74 68 3b 20 69 2b  value.Length; i+
0df0: 2b 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  +).        {.   
0e00: 20 20 20 20 20 20 20 49 6e 64 65 78 20 69 64 78         Index idx
0e10: 20 3d 20 76 61 6c 75 65 5b 69 5d 20 61 73 20 49   = value[i] as I
0e20: 6e 64 65 78 3b 0a 0a 20 20 20 20 20 20 20 20 20  ndex;..         
0e30: 20 69 66 20 28 69 64 78 20 69 73 20 50 72 69 6d   if (idx is Prim
0e40: 61 72 79 4b 65 79 29 0a 20 20 20 20 20 20 20 20  aryKey).        
0e50: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
0e60: 5f 74 61 62 6c 65 2e 50 72 69 6d 61 72 79 4b 65  _table.PrimaryKe
0e70: 79 20 3d 20 28 50 72 69 6d 61 72 79 4b 65 79 29  y = (PrimaryKey)
0e80: 69 64 78 3b 0a 20 20 20 20 20 20 20 20 20 20 20  idx;.           
0e90: 20 69 66 20 28 69 64 78 2e 49 73 44 69 72 74 79   if (idx.IsDirty
0ea0: 29 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0a  ) dirty = true;.
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e              coun
0ec0: 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  t++;.          }
0ed0: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a  .          else.
0ee0: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
0ef0: 20 20 20 20 20 20 20 20 69 66 20 28 69 64 78 20          if (idx 
0f00: 21 3d 20 6e 75 6c 6c 20 26 26 20 69 64 78 2e 43  != null && idx.C
0f10: 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 20 3e 20 30  olumns.Count > 0
0f20: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a  ).            {.
0f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64                id
0f40: 78 2e 4e 61 6d 65 20 3d 20 69 64 78 2e 4e 61 6d  x.Name = idx.Nam
0f50: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e;.             
0f60: 20 6c 69 73 74 2e 41 64 64 28 69 64 78 29 3b 0a   list.Add(idx);.
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
0f80: 20 28 69 64 78 2e 49 73 44 69 72 74 79 29 20 64   (idx.IsDirty) d
0f90: 69 72 74 79 20 3d 20 74 72 75 65 3b 0a 20 20 20  irty = true;.   
0fa0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74             count
0fb0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ++;.            
0fc0: 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  }.          }.  
0fd0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
0fe0: 0a 20 20 20 20 20 20 69 66 20 28 28 64 69 72 74  .      if ((dirt
0ff0: 79 20 3d 3d 20 74 72 75 65 20 7c 7c 20 63 6f 75  y == true || cou
1000: 6e 74 20 21 3d 20 5f 63 6f 75 6e 74 29 20 26 26  nt != _count) &&
1010: 20 5f 66 6f 72 6d 2e 44 69 61 6c 6f 67 52 65 73   _form.DialogRes
1020: 75 6c 74 20 3d 3d 20 44 69 61 6c 6f 67 52 65 73  ult == DialogRes
1030: 75 6c 74 2e 4f 4b 29 0a 20 20 20 20 20 20 20 20  ult.OK).        
1040: 5f 74 61 62 6c 65 2e 5f 6f 77 6e 65 72 2e 4d 61  _table._owner.Ma
1050: 6b 65 44 69 72 74 79 28 29 3b 0a 0a 20 20 20 20  keDirty();..    
1060: 20 20 72 65 74 75 72 6e 20 65 64 69 74 56 61 6c    return editVal
1070: 75 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ue;.    }.  }.. 
1080: 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20   internal class 
1090: 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 64 69 74 6f  IndexColumnEdito
10a0: 72 20 3a 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64  r : CollectionEd
10b0: 69 74 6f 72 0a 20 20 7b 0a 20 20 20 20 49 6e 64  itor.  {.    Ind
10c0: 65 78 20 5f 69 6e 64 65 78 3b 0a 20 20 20 20 6f  ex _index;.    o
10d0: 62 6a 65 63 74 5b 5d 20 5f 69 74 65 6d 73 3b 0a  bject[] _items;.
10e0: 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 5f 6f 72      object[] _or
10f0: 69 67 3b 0a 20 20 20 20 69 6e 74 20 5f 63 6f 75  ig;.    int _cou
1100: 6e 74 3b 0a 20 20 20 20 43 6f 6c 6c 65 63 74 69  nt;.    Collecti
1110: 6f 6e 45 64 69 74 6f 72 2e 43 6f 6c 6c 65 63 74  onEditor.Collect
1120: 69 6f 6e 46 6f 72 6d 20 5f 66 6f 72 6d 3b 0a 0a  ionForm _form;..
1130: 20 20 20 20 70 75 62 6c 69 63 20 49 6e 64 65 78      public Index
1140: 43 6f 6c 75 6d 6e 45 64 69 74 6f 72 28 29 20 3a  ColumnEditor() :
1150: 20 62 61 73 65 28 74 79 70 65 6f 66 28 4c 69 73   base(typeof(Lis
1160: 74 3c 49 6e 64 65 78 43 6f 6c 75 6d 6e 3e 29 29  t<IndexColumn>))
1170: 0a 20 20 20 20 7b 0a 20 20 20 20 7d 0a 0a 20 20  .    {.    }..  
1180: 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72    protected over
1190: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 45  ride CollectionE
11a0: 64 69 74 6f 72 2e 43 6f 6c 6c 65 63 74 69 6f 6e  ditor.Collection
11b0: 46 6f 72 6d 20 43 72 65 61 74 65 43 6f 6c 6c 65  Form CreateColle
11c0: 63 74 69 6f 6e 46 6f 72 6d 28 29 0a 20 20 20 20  ctionForm().    
11d0: 7b 0a 20 20 20 20 20 20 5f 66 6f 72 6d 20 3d 20  {.      _form = 
11e0: 62 61 73 65 2e 43 72 65 61 74 65 43 6f 6c 6c 65  base.CreateColle
11f0: 63 74 69 6f 6e 46 6f 72 6d 28 29 3b 0a 20 20 20  ctionForm();.   
1200: 20 20 20 5f 66 6f 72 6d 2e 54 65 78 74 20 3d 20     _form.Text = 
1210: 22 49 6e 64 65 78 20 43 6f 6c 75 6d 6e 73 20 45  "Index Columns E
1220: 64 69 74 6f 72 22 3b 0a 20 20 20 20 20 20 66 6f  ditor";.      fo
1230: 72 65 61 63 68 20 28 43 6f 6e 74 72 6f 6c 20 63  reach (Control c
1240: 20 69 6e 20 5f 66 6f 72 6d 2e 43 6f 6e 74 72 6f   in _form.Contro
1250: 6c 73 5b 30 5d 2e 43 6f 6e 74 72 6f 6c 73 29 0a  ls[0].Controls).
1260: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1270: 50 72 6f 70 65 72 74 79 47 72 69 64 20 67 72 69  PropertyGrid gri
1280: 64 20 3d 20 63 20 61 73 20 50 72 6f 70 65 72 74  d = c as Propert
1290: 79 47 72 69 64 3b 0a 20 20 20 20 20 20 20 20 69  yGrid;.        i
12a0: 66 20 28 67 72 69 64 20 21 3d 20 6e 75 6c 6c 29  f (grid != null)
12b0: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
12c0: 20 20 20 20 20 67 72 69 64 2e 48 65 6c 70 56 69       grid.HelpVi
12d0: 73 69 62 6c 65 20 3d 20 74 72 75 65 3b 0a 20 20  sible = true;.  
12e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
12f0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
1300: 0a 20 20 20 20 20 20 5f 66 6f 72 6d 2e 57 69 64  .      _form.Wid
1310: 74 68 20 3d 20 28 69 6e 74 29 28 5f 66 6f 72 6d  th = (int)(_form
1320: 2e 57 69 64 74 68 20 2a 20 31 2e 32 35 29 3b 0a  .Width * 1.25);.
1330: 20 20 20 20 20 20 5f 66 6f 72 6d 2e 48 65 69 67        _form.Heig
1340: 68 74 20 3d 20 28 69 6e 74 29 28 5f 66 6f 72 6d  ht = (int)(_form
1350: 2e 48 65 69 67 68 74 20 2a 20 31 2e 32 35 29 3b  .Height * 1.25);
1360: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66  .      return _f
1370: 6f 72 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  orm;.    }..    
1380: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
1390: 6f 62 6a 65 63 74 20 45 64 69 74 56 61 6c 75 65  object EditValue
13a0: 28 49 54 79 70 65 44 65 73 63 72 69 70 74 6f 72  (ITypeDescriptor
13b0: 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74 2c  Context context,
13c0: 20 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65   IServiceProvide
13d0: 72 20 70 72 6f 76 69 64 65 72 2c 20 6f 62 6a 65  r provider, obje
13e0: 63 74 20 76 61 6c 75 65 29 0a 20 20 20 20 7b 0a  ct value).    {.
13f0: 20 20 20 20 20 20 5f 69 6e 64 65 78 20 3d 20 63        _index = c
1400: 6f 6e 74 65 78 74 2e 49 6e 73 74 61 6e 63 65 20  ontext.Instance 
1410: 61 73 20 49 6e 64 65 78 3b 0a 20 20 20 20 20 20  as Index;.      
1420: 5f 69 74 65 6d 73 20 3d 20 6e 75 6c 6c 3b 0a 20  _items = null;. 
1430: 20 20 20 20 20 5f 63 6f 75 6e 74 20 3d 20 30 3b       _count = 0;
1440: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 61  .      return ba
1450: 73 65 2e 45 64 69 74 56 61 6c 75 65 28 63 6f 6e  se.EditValue(con
1460: 74 65 78 74 2c 20 70 72 6f 76 69 64 65 72 2c 20  text, provider, 
1470: 76 61 6c 75 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  value);.    }.. 
1480: 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65     protected ove
1490: 72 72 69 64 65 20 6f 62 6a 65 63 74 20 43 72 65  rride object Cre
14a0: 61 74 65 49 6e 73 74 61 6e 63 65 28 54 79 70 65  ateInstance(Type
14b0: 20 69 74 65 6d 54 79 70 65 29 0a 20 20 20 20 7b   itemType).    {
14c0: 0a 20 20 20 20 20 20 69 66 20 28 69 74 65 6d 54  .      if (itemT
14d0: 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e  ype == typeof(In
14e0: 64 65 78 43 6f 6c 75 6d 6e 29 29 0a 20 20 20 20  dexColumn)).    
14f0: 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75    {.        retu
1500: 72 6e 20 6e 65 77 20 49 6e 64 65 78 43 6f 6c 75  rn new IndexColu
1510: 6d 6e 28 5f 69 6e 64 65 78 2c 20 6e 75 6c 6c 29  mn(_index, null)
1520: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1530: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 53 75 70  throw new NotSup
1540: 70 6f 72 74 65 64 45 78 63 65 70 74 69 6f 6e 28  portedException(
1550: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  );.    }..    pr
1560: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
1570: 20 6f 62 6a 65 63 74 5b 5d 20 47 65 74 49 74 65   object[] GetIte
1580: 6d 73 28 6f 62 6a 65 63 74 20 65 64 69 74 56 61  ms(object editVa
1590: 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  lue).    {.     
15a0: 20 69 66 20 28 5f 69 74 65 6d 73 20 3d 3d 20 6e   if (_items == n
15b0: 75 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20 20 20  ull).      {.   
15c0: 20 20 20 20 20 4c 69 73 74 3c 49 6e 64 65 78 43       List<IndexC
15d0: 6f 6c 75 6d 6e 3e 20 76 61 6c 75 65 20 3d 20 65  olumn> value = e
15e0: 64 69 74 56 61 6c 75 65 20 61 73 20 4c 69 73 74  ditValue as List
15f0: 3c 49 6e 64 65 78 43 6f 6c 75 6d 6e 3e 3b 0a 20  <IndexColumn>;. 
1600: 20 20 20 20 20 20 20 5f 69 74 65 6d 73 20 3d 20         _items = 
1610: 6e 65 77 20 6f 62 6a 65 63 74 5b 76 61 6c 75 65  new object[value
1620: 2e 43 6f 75 6e 74 5d 3b 0a 20 20 20 20 20 20 20  .Count];.       
1630: 20 5f 6f 72 69 67 20 3d 20 6e 65 77 20 6f 62 6a   _orig = new obj
1640: 65 63 74 5b 76 61 6c 75 65 2e 43 6f 75 6e 74 5d  ect[value.Count]
1650: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69  ;.        for (i
1660: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 69  nt n = 0; n < _i
1670: 74 65 6d 73 2e 4c 65 6e 67 74 68 3b 20 6e 2b 2b  tems.Length; n++
1680: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
1690: 20 20 20 20 20 20 5f 69 74 65 6d 73 5b 6e 5d 20        _items[n] 
16a0: 3d 20 28 28 49 43 6c 6f 6e 65 61 62 6c 65 29 76  = ((ICloneable)v
16b0: 61 6c 75 65 5b 6e 5d 29 2e 43 6c 6f 6e 65 28 29  alue[n]).Clone()
16c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 5f 6f 72 69  ;.          _ori
16d0: 67 5b 6e 5d 20 3d 20 76 61 6c 75 65 5b 6e 5d 3b  g[n] = value[n];
16e0: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
16f0: 20 20 20 20 5f 63 6f 75 6e 74 20 3d 20 5f 69 74      _count = _it
1700: 65 6d 73 2e 4c 65 6e 67 74 68 3b 0a 20 20 20 20  ems.Length;.    
1710: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
1720: 20 5f 69 74 65 6d 73 3b 0a 20 20 20 20 7d 0a 0a   _items;.    }..
1730: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76      protected ov
1740: 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 53 65  erride object Se
1750: 74 49 74 65 6d 73 28 6f 62 6a 65 63 74 20 65 64  tItems(object ed
1760: 69 74 56 61 6c 75 65 2c 20 6f 62 6a 65 63 74 5b  itValue, object[
1770: 5d 20 76 61 6c 75 65 29 0a 20 20 20 20 7b 0a 20  ] value).    {. 
1780: 20 20 20 20 20 69 66 20 28 5f 66 6f 72 6d 2e 44       if (_form.D
1790: 69 61 6c 6f 67 52 65 73 75 6c 74 20 3d 3d 20 44  ialogResult == D
17a0: 69 61 6c 6f 67 52 65 73 75 6c 74 2e 43 61 6e 63  ialogResult.Canc
17b0: 65 6c 29 0a 20 20 20 20 20 20 20 20 76 61 6c 75  el).        valu
17c0: 65 20 3d 20 5f 6f 72 69 67 3b 0a 0a 20 20 20 20  e = _orig;..    
17d0: 20 20 69 66 20 28 65 64 69 74 56 61 6c 75 65 20    if (editValue 
17e0: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 7b  != null).      {
17f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 28 65  .        if (!(e
1800: 64 69 74 56 61 6c 75 65 20 69 73 20 49 4c 69 73  ditValue is ILis
1810: 74 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  t)).        {.  
1820: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 65          return e
1830: 64 69 74 56 61 6c 75 65 3b 0a 20 20 20 20 20 20  ditValue;.      
1840: 20 20 7d 0a 20 20 20 20 20 20 20 20 49 4c 69 73    }.        ILis
1850: 74 20 6c 69 73 74 20 3d 20 28 49 4c 69 73 74 29  t list = (IList)
1860: 65 64 69 74 56 61 6c 75 65 3b 0a 20 20 20 20 20  editValue;.     
1870: 20 20 20 6c 69 73 74 2e 43 6c 65 61 72 28 29 3b     list.Clear();
1880: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
1890: 74 20 69 20 3d 20 30 3b 20 69 20 3c 20 76 61 6c  t i = 0; i < val
18a0: 75 65 2e 4c 65 6e 67 74 68 3b 20 69 2b 2b 29 0a  ue.Length; i++).
18b0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
18c0: 20 20 20 20 49 6e 64 65 78 43 6f 6c 75 6d 6e 20      IndexColumn 
18d0: 69 64 78 20 3d 20 76 61 6c 75 65 5b 69 5d 20 61  idx = value[i] a
18e0: 73 20 49 6e 64 65 78 43 6f 6c 75 6d 6e 3b 0a 0a  s IndexColumn;..
18f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 64            if (id
1900: 78 20 21 3d 20 6e 75 6c 6c 20 26 26 20 53 74 72  x != null && Str
1910: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1920: 79 28 69 64 78 2e 43 6f 6c 75 6d 6e 29 20 3d 3d  y(idx.Column) ==
1930: 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20   false).        
1940: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
1950: 6c 69 73 74 2e 41 64 64 28 76 61 6c 75 65 5b 69  list.Add(value[i
1960: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ]);.          }.
1970: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1980: 7d 0a 0a 20 20 20 20 20 20 69 66 20 28 28 5f 69  }..      if ((_i
1990: 6e 64 65 78 2e 49 73 44 69 72 74 79 20 7c 7c 20  ndex.IsDirty || 
19a0: 5f 69 6e 64 65 78 2e 43 6f 6c 75 6d 6e 73 2e 43  _index.Columns.C
19b0: 6f 75 6e 74 20 21 3d 20 5f 63 6f 75 6e 74 29 20  ount != _count) 
19c0: 26 26 20 5f 66 6f 72 6d 2e 44 69 61 6c 6f 67 52  && _form.DialogR
19d0: 65 73 75 6c 74 20 3d 3d 20 44 69 61 6c 6f 67 52  esult == DialogR
19e0: 65 73 75 6c 74 2e 4f 4b 29 0a 20 20 20 20 20 20  esult.OK).      
19f0: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 69  {.        if (_i
1a00: 6e 64 65 78 2e 43 6f 6c 75 6d 6e 73 2e 43 6f 75  ndex.Columns.Cou
1a10: 6e 74 20 3e 20 30 20 26 26 20 53 74 72 69 6e 67  nt > 0 && String
1a20: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 5f  .IsNullOrEmpty(_
1a30: 69 6e 64 65 78 2e 5f 6e 61 6d 65 29 20 3d 3d 20  index._name) == 
1a40: 74 72 75 65 29 0a 20 20 20 20 20 20 20 20 20 20  true).          
1a50: 5f 69 6e 64 65 78 2e 4e 61 6d 65 20 3d 20 5f 69  _index.Name = _i
1a60: 6e 64 65 78 2e 4e 61 6d 65 3b 0a 20 20 20 20 20  ndex.Name;.     
1a70: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
1a80: 65 64 69 74 56 61 6c 75 65 3b 0a 20 20 20 20 7d  editValue;.    }
1a90: 0a 20 20 7d 0a 0a 20 20 69 6e 74 65 72 6e 61 6c  .  }..  internal
1aa0: 20 63 6c 61 73 73 20 49 6e 64 65 78 54 79 70 65   class IndexType
1ab0: 43 6f 6e 76 65 72 74 65 72 20 3a 20 54 79 70 65  Converter : Type
1ac0: 43 6f 6e 76 65 72 74 65 72 0a 20 20 7b 0a 20 20  Converter.  {.  
1ad0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
1ae0: 65 20 62 6f 6f 6c 20 43 61 6e 43 6f 6e 76 65 72  e bool CanConver
1af0: 74 46 72 6f 6d 28 49 54 79 70 65 44 65 73 63 72  tFrom(ITypeDescr
1b00: 69 70 74 6f 72 43 6f 6e 74 65 78 74 20 63 6f 6e  iptorContext con
1b10: 74 65 78 74 2c 20 54 79 70 65 20 73 6f 75 72 63  text, Type sourc
1b20: 65 54 79 70 65 29 0a 20 20 20 20 7b 0a 20 20 20  eType).    {.   
1b30: 20 20 20 69 66 20 28 73 6f 75 72 63 65 54 79 70     if (sourceTyp
1b40: 65 20 3d 3d 20 74 79 70 65 6f 66 28 73 74 72 69  e == typeof(stri
1b50: 6e 67 29 29 20 72 65 74 75 72 6e 20 74 72 75 65  ng)) return true
1b60: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 62  ;.      return b
1b70: 61 73 65 2e 43 61 6e 43 6f 6e 76 65 72 74 46 72  ase.CanConvertFr
1b80: 6f 6d 28 63 6f 6e 74 65 78 74 2c 20 73 6f 75 72  om(context, sour
1b90: 63 65 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 0a  ceType);.    }..
1ba0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
1bb0: 69 64 65 20 62 6f 6f 6c 20 43 61 6e 43 6f 6e 76  ide bool CanConv
1bc0: 65 72 74 54 6f 28 49 54 79 70 65 44 65 73 63 72  ertTo(ITypeDescr
1bd0: 69 70 74 6f 72 43 6f 6e 74 65 78 74 20 63 6f 6e  iptorContext con
1be0: 74 65 78 74 2c 20 54 79 70 65 20 64 65 73 74 69  text, Type desti
1bf0: 6e 61 74 69 6f 6e 54 79 70 65 29 0a 20 20 20 20  nationType).    
1c00: 7b 0a 20 20 20 20 20 20 69 66 20 28 64 65 73 74  {.      if (dest
1c10: 69 6e 61 74 69 6f 6e 54 79 70 65 20 3d 3d 20 74  inationType == t
1c20: 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29 20 72  ypeof(string)) r
1c30: 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20  eturn true;.    
1c40: 20 20 72 65 74 75 72 6e 20 62 61 73 65 2e 43 61    return base.Ca
1c50: 6e 43 6f 6e 76 65 72 74 54 6f 28 63 6f 6e 74 65  nConvertTo(conte
1c60: 78 74 2c 20 64 65 73 74 69 6e 61 74 69 6f 6e 54  xt, destinationT
1c70: 79 70 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ype);.    }..   
1c80: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
1c90: 20 6f 62 6a 65 63 74 20 43 6f 6e 76 65 72 74 54   object ConvertT
1ca0: 6f 28 49 54 79 70 65 44 65 73 63 72 69 70 74 6f  o(ITypeDescripto
1cb0: 72 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74  rContext context
1cc0: 2c 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69  , System.Globali
1cd0: 7a 61 74 69 6f 6e 2e 43 75 6c 74 75 72 65 49 6e  zation.CultureIn
1ce0: 66 6f 20 63 75 6c 74 75 72 65 2c 20 6f 62 6a 65  fo culture, obje
1cf0: 63 74 20 76 61 6c 75 65 2c 20 54 79 70 65 20 64  ct value, Type d
1d00: 65 73 74 69 6e 61 74 69 6f 6e 54 79 70 65 29 0a  estinationType).
1d10: 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28      {.      if (
1d20: 64 65 73 74 69 6e 61 74 69 6f 6e 54 79 70 65 20  destinationType 
1d30: 3d 3d 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67  == typeof(string
1d40: 29 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  )).      {.     
1d50: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
1d60: 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20 53   builder = new S
1d70: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0a  tringBuilder();.
1d80: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
1d90: 65 70 61 72 61 74 6f 72 20 3d 20 22 22 3b 0a 20  eparator = "";. 
1da0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
1db0: 49 6e 64 65 78 43 6f 6c 75 6d 6e 20 63 20 69 6e  IndexColumn c in
1dc0: 20 28 4c 69 73 74 3c 49 6e 64 65 78 43 6f 6c 75   (List<IndexColu
1dd0: 6d 6e 3e 29 76 61 6c 75 65 29 0a 20 20 20 20 20  mn>)value).     
1de0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 62     {.          b
1df0: 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72  uilder.AppendFor
1e00: 6d 61 74 28 22 7b 30 7d 5b 7b 31 7d 5d 22 2c 20  mat("{0}[{1}]", 
1e10: 73 65 70 61 72 61 74 6f 72 2c 20 63 2e 43 6f 6c  separator, c.Col
1e20: 75 6d 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  umn);.          
1e30: 69 66 20 28 63 2e 53 6f 72 74 4d 6f 64 65 20 21  if (c.SortMode !
1e40: 3d 20 43 6f 6c 75 6d 6e 53 6f 72 74 4d 6f 64 65  = ColumnSortMode
1e50: 2e 41 73 63 65 6e 64 69 6e 67 29 0a 20 20 20 20  .Ascending).    
1e60: 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
1e70: 41 70 70 65 6e 64 28 22 20 44 45 53 43 22 29 3b  Append(" DESC");
1e80: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63  .          if (c
1e90: 2e 43 6f 6c 6c 61 74 65 20 21 3d 20 22 42 49 4e  .Collate != "BIN
1ea0: 41 52 59 22 29 0a 20 20 20 20 20 20 20 20 20 20  ARY").          
1eb0: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
1ec0: 46 6f 72 6d 61 74 28 22 20 43 4f 4c 4c 41 54 45  Format(" COLLATE
1ed0: 20 7b 30 7d 22 2c 20 63 2e 43 6f 6c 6c 61 74 65   {0}", c.Collate
1ee0: 2e 54 6f 55 70 70 65 72 49 6e 76 61 72 69 61 6e  .ToUpperInvarian
1ef0: 74 28 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  t());..         
1f00: 20 73 65 70 61 72 61 74 6f 72 20 3d 20 22 2c 20   separator = ", 
1f10: 22 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ";.        }.   
1f20: 20 20 20 20 20 72 65 74 75 72 6e 20 62 75 69 6c       return buil
1f30: 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0a  der.ToString();.
1f40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65 6c        }.      el
1f50: 73 65 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  se.        retur
1f60: 6e 20 62 61 73 65 2e 43 6f 6e 76 65 72 74 54 6f  n base.ConvertTo
1f70: 28 63 6f 6e 74 65 78 74 2c 20 63 75 6c 74 75 72  (context, cultur
1f80: 65 2c 20 76 61 6c 75 65 2c 20 64 65 73 74 69 6e  e, value, destin
1f90: 61 74 69 6f 6e 54 79 70 65 29 3b 0a 20 20 20 20  ationType);.    
1fa0: 7d 0a 20 20 7d 0a 0a 20 20 69 6e 74 65 72 6e 61  }.  }..  interna
1fb0: 6c 20 65 6e 75 6d 20 43 6f 6c 75 6d 6e 53 6f 72  l enum ColumnSor
1fc0: 74 4d 6f 64 65 0a 20 20 7b 0a 20 20 20 20 41 73  tMode.  {.    As
1fd0: 63 65 6e 64 69 6e 67 20 3d 20 30 2c 0a 20 20 20  cending = 0,.   
1fe0: 20 44 65 73 63 65 6e 64 69 6e 67 20 3d 20 31 0a   Descending = 1.
1ff0: 20 20 7d 0a 0a 20 20 5b 44 65 66 61 75 6c 74 50    }..  [DefaultP
2000: 72 6f 70 65 72 74 79 28 22 43 6f 6c 75 6d 6e 22  roperty("Column"
2010: 29 5d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c  )].  internal cl
2020: 61 73 73 20 49 6e 64 65 78 43 6f 6c 75 6d 6e 20  ass IndexColumn 
2030: 3a 20 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f  : IHaveConnectio
2040: 6e 53 63 6f 70 65 2c 20 49 43 6c 6f 6e 65 61 62  nScope, ICloneab
2050: 6c 65 0a 20 20 7b 0a 20 20 20 20 69 6e 74 65 72  le.  {.    inter
2060: 6e 61 6c 20 49 6e 64 65 78 20 5f 70 61 72 65 6e  nal Index _paren
2070: 74 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  t;.    private s
2080: 74 72 69 6e 67 20 5f 63 6f 6c 75 6d 6e 3b 0a 20  tring _column;. 
2090: 20 20 20 70 72 69 76 61 74 65 20 43 6f 6c 75 6d     private Colum
20a0: 6e 53 6f 72 74 4d 6f 64 65 20 5f 6d 6f 64 65 20  nSortMode _mode 
20b0: 3d 20 43 6f 6c 75 6d 6e 53 6f 72 74 4d 6f 64 65  = ColumnSortMode
20c0: 2e 41 73 63 65 6e 64 69 6e 67 3b 0a 20 20 20 20  .Ascending;.    
20d0: 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 5f  private string _
20e0: 63 6f 6c 6c 61 74 65 20 3d 20 22 42 49 4e 41 52  collate = "BINAR
20f0: 59 22 3b 0a 0a 20 20 20 20 5b 45 64 69 74 6f 72  Y";..    [Editor
2100: 28 74 79 70 65 6f 66 28 43 6f 6c 75 6d 6e 73 54  (typeof(ColumnsT
2110: 79 70 65 45 64 69 74 6f 72 29 2c 20 74 79 70 65  ypeEditor), type
2120: 6f 66 28 55 49 54 79 70 65 45 64 69 74 6f 72 29  of(UITypeEditor)
2130: 29 5d 0a 20 20 20 20 5b 44 69 73 70 6c 61 79 4e  )].    [DisplayN
2140: 61 6d 65 28 22 42 61 73 65 20 43 6f 6c 75 6d 6e  ame("Base Column
2150: 22 29 5d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72  ")].    [Categor
2160: 79 28 22 53 6f 75 72 63 65 22 29 5d 0a 20 20 20  y("Source")].   
2170: 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22 54   [Description("T
2180: 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74  he column name t
2190: 6f 20 62 65 20 69 6e 63 6c 75 64 65 64 20 69 6e  o be included in
21a0: 20 74 68 65 20 69 6e 64 65 78 2e 22 29 5d 0a 20   the index.")]. 
21b0: 20 20 20 5b 4e 6f 74 69 66 79 50 61 72 65 6e 74     [NotifyParent
21c0: 50 72 6f 70 65 72 74 79 28 74 72 75 65 29 5d 0a  Property(true)].
21d0: 20 20 20 20 5b 52 65 66 72 65 73 68 50 72 6f 70      [RefreshProp
21e0: 65 72 74 69 65 73 28 52 65 66 72 65 73 68 50 72  erties(RefreshPr
21f0: 6f 70 65 72 74 69 65 73 2e 41 6c 6c 29 5d 0a 20  operties.All)]. 
2200: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
2210: 20 43 6f 6c 75 6d 6e 0a 20 20 20 20 7b 0a 20 20   Column.    {.  
2220: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
2230: 20 5f 63 6f 6c 75 6d 6e 3b 20 7d 0a 20 20 20 20   _column; }.    
2240: 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    set.      {.  
2250: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6c 75 6d        if (_colum
2260: 6e 20 21 3d 20 76 61 6c 75 65 29 0a 20 20 20 20  n != value).    
2270: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2280: 5f 63 6f 6c 75 6d 6e 20 3d 20 76 61 6c 75 65 3b  _column = value;
2290: 0a 20 20 20 20 20 20 20 20 20 20 5f 70 61 72 65  .          _pare
22a0: 6e 74 2e 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a  nt.MakeDirty();.
22b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
22c0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 44 65  }.    }..    [De
22d0: 66 61 75 6c 74 56 61 6c 75 65 28 43 6f 6c 75 6d  faultValue(Colum
22e0: 6e 53 6f 72 74 4d 6f 64 65 2e 41 73 63 65 6e 64  nSortMode.Ascend
22f0: 69 6e 67 29 5d 0a 20 20 20 20 5b 43 61 74 65 67  ing)].    [Categ
2300: 6f 72 79 28 22 43 6f 6e 73 74 72 61 69 6e 74 73  ory("Constraints
2310: 22 29 5d 0a 20 20 20 20 5b 44 65 73 63 72 69 70  ")].    [Descrip
2320: 74 69 6f 6e 28 22 53 70 65 63 69 66 69 65 73 20  tion("Specifies 
2330: 77 68 61 74 20 6f 72 64 65 72 20 74 6f 20 73 6f  what order to so
2340: 72 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  rt the column in
2350: 2e 20 20 44 65 73 63 65 6e 64 69 6e 67 20 69 6e  .  Descending in
2360: 64 65 78 65 73 20 61 72 65 20 6e 6f 74 20 73 75  dexes are not su
2370: 70 70 6f 72 74 65 64 20 77 68 65 6e 20 75 73 69  pported when usi
2380: 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 6c 65  ng the SQLite le
2390: 67 61 63 79 20 66 69 6c 65 20 66 6f 72 6d 61 74  gacy file format
23a0: 2e 22 29 5d 0a 20 20 20 20 5b 4e 6f 74 69 66 79  .")].    [Notify
23b0: 50 61 72 65 6e 74 50 72 6f 70 65 72 74 79 28 74  ParentProperty(t
23c0: 72 75 65 29 5d 0a 20 20 20 20 5b 52 65 66 72 65  rue)].    [Refre
23d0: 73 68 50 72 6f 70 65 72 74 69 65 73 28 52 65 66  shProperties(Ref
23e0: 72 65 73 68 50 72 6f 70 65 72 74 69 65 73 2e 41  reshProperties.A
23f0: 6c 6c 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  ll)].    public 
2400: 43 6f 6c 75 6d 6e 53 6f 72 74 4d 6f 64 65 20 53  ColumnSortMode S
2410: 6f 72 74 4d 6f 64 65 0a 20 20 20 20 7b 0a 20 20  ortMode.    {.  
2420: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
2430: 20 5f 6d 6f 64 65 3b 20 7d 0a 20 20 20 20 20 20   _mode; }.      
2440: 73 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  set.      {.    
2450: 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 21 3d      if (value !=
2460: 20 5f 6d 6f 64 65 29 0a 20 20 20 20 20 20 20 20   _mode).        
2470: 7b 0a 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64  {.          _mod
2480: 65 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20  e = value;.     
2490: 20 20 20 20 20 5f 70 61 72 65 6e 74 2e 4d 61 6b       _parent.Mak
24a0: 65 44 69 72 74 79 28 29 3b 0a 20 20 20 20 20 20  eDirty();.      
24b0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
24c0: 7d 0a 0a 20 20 20 20 5b 44 65 66 61 75 6c 74 56  }..    [DefaultV
24d0: 61 6c 75 65 28 22 42 49 4e 41 52 59 22 29 5d 0a  alue("BINARY")].
24e0: 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22 43      [Category("C
24f0: 6f 6e 73 74 72 61 69 6e 74 73 22 29 5d 0a 20 20  onstraints")].  
2500: 20 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66    [Editor(typeof
2510: 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 64  (CollationTypeEd
2520: 69 74 6f 72 29 2c 20 74 79 70 65 6f 66 28 55 49  itor), typeof(UI
2530: 54 79 70 65 45 64 69 74 6f 72 29 29 5d 0a 20 20  TypeEditor))].  
2540: 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22    [Description("
2550: 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  The collation se
2560: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 74 6f  quence to use to
2570: 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 69 6e   generate the in
2580: 64 65 78 20 66 6f 72 20 74 68 65 20 73 70 65 63  dex for the spec
2590: 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 22 29 5d  ified column.")]
25a0: 0a 20 20 20 20 5b 4e 6f 74 69 66 79 50 61 72 65  .    [NotifyPare
25b0: 6e 74 50 72 6f 70 65 72 74 79 28 74 72 75 65 29  ntProperty(true)
25c0: 5d 0a 20 20 20 20 5b 52 65 66 72 65 73 68 50 72  ].    [RefreshPr
25d0: 6f 70 65 72 74 69 65 73 28 52 65 66 72 65 73 68  operties(Refresh
25e0: 50 72 6f 70 65 72 74 69 65 73 2e 41 6c 6c 29 5d  Properties.All)]
25f0: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
2600: 6e 67 20 43 6f 6c 6c 61 74 65 0a 20 20 20 20 7b  ng Collate.    {
2610: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
2620: 75 72 6e 20 5f 63 6f 6c 6c 61 74 65 3b 20 7d 0a  urn _collate; }.
2630: 20 20 20 20 20 20 73 65 74 0a 20 20 20 20 20 20        set.      
2640: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74  {.        if (St
2650: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
2660: 74 79 28 76 61 6c 75 65 29 29 20 76 61 6c 75 65  ty(value)) value
2670: 20 3d 20 22 42 49 4e 41 52 59 22 3b 0a 0a 20 20   = "BINARY";..  
2680: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
2690: 21 3d 20 5f 63 6f 6c 6c 61 74 65 29 0a 20 20 20  != _collate).   
26a0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
26b0: 20 5f 63 6f 6c 6c 61 74 65 20 3d 20 76 61 6c 75   _collate = valu
26c0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  e;.          if 
26d0: 28 5f 70 61 72 65 6e 74 20 69 73 20 50 72 69 6d  (_parent is Prim
26e0: 61 72 79 4b 65 79 29 0a 20 20 20 20 20 20 20 20  aryKey).        
26f0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
2700: 50 72 69 6d 61 72 79 4b 65 79 20 70 6b 20 3d 20  PrimaryKey pk = 
2710: 5f 70 61 72 65 6e 74 20 61 73 20 50 72 69 6d 61  _parent as Prima
2720: 72 79 4b 65 79 3b 0a 20 20 20 20 20 20 20 20 20  ryKey;.         
2730: 20 20 20 69 66 20 28 70 6b 2e 43 6f 6c 75 6d 6e     if (pk.Column
2740: 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 29 0a 20 20  s.Count == 1).  
2750: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
2760: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
2770: 68 20 28 43 6f 6c 75 6d 6e 20 63 20 69 6e 20 70  h (Column c in p
2780: 6b 2e 54 61 62 6c 65 2e 43 6f 6c 75 6d 6e 73 29  k.Table.Columns)
2790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
27a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b0: 20 69 66 20 28 73 74 72 69 6e 67 2e 43 6f 6d 70   if (string.Comp
27c0: 61 72 65 28 63 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  are(c.ColumnName
27d0: 2c 20 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67  , Column, String
27e0: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
27f0: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
2800: 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   0).            
2810: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2820: 20 20 20 20 20 20 20 20 63 2e 43 6f 6c 6c 61 74          c.Collat
2830: 65 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20  e = value;.     
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
2850: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ak;.            
2860: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
2870: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
2880: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a    }.          }.
2890: 20 20 20 20 20 20 20 20 20 20 5f 70 61 72 65 6e            _paren
28a0: 74 2e 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20  t.MakeDirty();. 
28b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
28c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c  .    }..    publ
28d0: 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  ic override stri
28e0: 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0a 20 20  ng ToString().  
28f0: 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 53 74    {.      if (St
2900: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
2910: 74 79 28 5f 63 6f 6c 75 6d 6e 29 20 3d 3d 20 74  ty(_column) == t
2920: 72 75 65 29 20 72 65 74 75 72 6e 20 22 28 6e 6f  rue) return "(no
2930: 6e 65 29 22 3b 0a 20 20 20 20 20 20 72 65 74 75  ne)";.      retu
2940: 72 6e 20 5f 63 6f 6c 75 6d 6e 3b 0a 20 20 20 20  rn _column;.    
2950: 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 49  }..    private I
2960: 6e 64 65 78 43 6f 6c 75 6d 6e 28 49 6e 64 65 78  ndexColumn(Index
2970: 43 6f 6c 75 6d 6e 20 73 6f 75 72 63 65 29 0a 20  Column source). 
2980: 20 20 20 7b 0a 20 20 20 20 20 20 5f 70 61 72 65     {.      _pare
2990: 6e 74 20 3d 20 73 6f 75 72 63 65 2e 5f 70 61 72  nt = source._par
29a0: 65 6e 74 3b 0a 20 20 20 20 20 20 5f 63 6f 6c 75  ent;.      _colu
29b0: 6d 6e 20 3d 20 73 6f 75 72 63 65 2e 5f 63 6f 6c  mn = source._col
29c0: 75 6d 6e 3b 0a 20 20 20 20 20 20 5f 6d 6f 64 65  umn;.      _mode
29d0: 20 3d 20 73 6f 75 72 63 65 2e 5f 6d 6f 64 65 3b   = source._mode;
29e0: 0a 20 20 20 20 20 20 5f 63 6f 6c 6c 61 74 65 20  .      _collate 
29f0: 3d 20 73 6f 75 72 63 65 2e 5f 63 6f 6c 6c 61 74  = source._collat
2a00: 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  e;.    }..    in
2a10: 74 65 72 6e 61 6c 20 49 6e 64 65 78 43 6f 6c 75  ternal IndexColu
2a20: 6d 6e 28 49 6e 64 65 78 20 70 61 72 65 6e 74 2c  mn(Index parent,
2a30: 20 44 61 74 61 52 6f 77 20 72 6f 77 29 0a 20 20   DataRow row).  
2a40: 20 20 7b 0a 20 20 20 20 20 20 5f 70 61 72 65 6e    {.      _paren
2a50: 74 20 3d 20 70 61 72 65 6e 74 3b 0a 20 20 20 20  t = parent;.    
2a60: 20 20 69 66 20 28 72 6f 77 20 21 3d 20 6e 75 6c    if (row != nul
2a70: 6c 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  l).      {.     
2a80: 20 20 20 5f 63 6f 6c 75 6d 6e 20 3d 20 72 6f 77     _column = row
2a90: 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22 5d 2e  ["COLUMN_NAME"].
2aa0: 54 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20  ToString();.    
2ab0: 20 20 20 20 69 66 20 28 72 6f 77 2e 49 73 4e 75      if (row.IsNu
2ac0: 6c 6c 28 22 53 4f 52 54 5f 4d 4f 44 45 22 29 20  ll("SORT_MODE") 
2ad0: 3d 3d 20 66 61 6c 73 65 20 26 26 20 28 73 74 72  == false && (str
2ae0: 69 6e 67 29 72 6f 77 5b 22 53 4f 52 54 5f 4d 4f  ing)row["SORT_MO
2af0: 44 45 22 5d 20 21 3d 20 22 41 53 43 22 29 0a 20  DE"] != "ASC"). 
2b00: 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 65 20 3d           _mode =
2b10: 20 43 6f 6c 75 6d 6e 53 6f 72 74 4d 6f 64 65 2e   ColumnSortMode.
2b20: 44 65 73 63 65 6e 64 69 6e 67 3b 0a 0a 20 20 20  Descending;..   
2b30: 20 20 20 20 20 69 66 20 28 72 6f 77 2e 49 73 4e       if (row.IsN
2b40: 75 6c 6c 28 22 43 4f 4c 4c 41 54 49 4f 4e 5f 4e  ull("COLLATION_N
2b50: 41 4d 45 22 29 20 3d 3d 20 66 61 6c 73 65 29 0a  AME") == false).
2b60: 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6c 6c 61            _colla
2b70: 74 65 20 3d 20 72 6f 77 5b 22 43 4f 4c 4c 41 54  te = row["COLLAT
2b80: 49 4f 4e 5f 4e 41 4d 45 22 5d 2e 54 6f 53 74 72  ION_NAME"].ToStr
2b90: 69 6e 67 28 29 2e 54 6f 55 70 70 65 72 49 6e 76  ing().ToUpperInv
2ba0: 61 72 69 61 6e 74 28 29 3b 0a 20 20 20 20 20 20  ariant();.      
2bb0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  }.    }..    pub
2bc0: 6c 69 63 20 6f 62 6a 65 63 74 20 43 6c 6f 6e 65  lic object Clone
2bd0: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  ().    {.      r
2be0: 65 74 75 72 6e 20 6e 65 77 20 49 6e 64 65 78 43  eturn new IndexC
2bf0: 6f 6c 75 6d 6e 28 74 68 69 73 29 3b 0a 20 20 20  olumn(this);.   
2c00: 20 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20   }..    #region 
2c10: 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 53  IHaveConnectionS
2c20: 63 6f 70 65 20 4d 65 6d 62 65 72 73 0a 0a 20 20  cope Members..  
2c30: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c    [Browsable(fal
2c40: 73 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  se)].    public 
2c50: 73 74 72 69 6e 67 20 43 61 74 61 6c 6f 67 53 63  string CatalogSc
2c60: 6f 70 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ope.    {.      
2c70: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 70 61  get { return _pa
2c80: 72 65 6e 74 2e 54 61 62 6c 65 2e 43 61 74 61 6c  rent.Table.Catal
2c90: 6f 67 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  og; }.    }..   
2ca0: 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73   [Browsable(fals
2cb0: 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  e)].    public s
2cc0: 74 72 69 6e 67 20 54 61 62 6c 65 53 63 6f 70 65  tring TableScope
2cd0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
2ce0: 20 7b 20 72 65 74 75 72 6e 20 5f 70 61 72 65 6e   { return _paren
2cf0: 74 2e 54 61 62 6c 65 2e 4e 61 6d 65 3b 20 7d 0a  t.Table.Name; }.
2d00: 20 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
2d10: 65 67 69 6f 6e 0a 0a 20 20 20 20 23 72 65 67 69  egion..    #regi
2d20: 6f 6e 20 49 48 61 76 65 43 6f 6e 6e 65 63 74 69  on IHaveConnecti
2d30: 6f 6e 20 4d 65 6d 62 65 72 73 0a 0a 20 20 20 20  on Members..    
2d40: 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65  [Browsable(false
2d50: 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 56 69  )].    public Vi
2d60: 65 77 54 61 62 6c 65 42 61 73 65 20 44 65 73 69  ewTableBase Desi
2d70: 67 6e 54 61 62 6c 65 0a 20 20 20 20 7b 0a 20 20  gnTable.    {.  
2d80: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
2d90: 20 5f 70 61 72 65 6e 74 2e 44 65 73 69 67 6e 54   _parent.DesignT
2da0: 61 62 6c 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20  able; }.    }.. 
2db0: 20 20 20 70 75 62 6c 69 63 20 44 62 43 6f 6e 6e     public DbConn
2dc0: 65 63 74 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63  ection GetConnec
2dd0: 74 69 6f 6e 28 29 0a 20 20 20 20 7b 0a 20 20 20  tion().    {.   
2de0: 20 20 20 72 65 74 75 72 6e 20 28 28 49 48 61 76     return ((IHav
2df0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 5f 70 61 72  eConnection)_par
2e00: 65 6e 74 29 2e 47 65 74 43 6f 6e 6e 65 63 74 69  ent).GetConnecti
2e10: 6f 6e 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  on();.    }..   
2e20: 20 23 65 6e 64 72 65 67 69 6f 6e 0a 20 20 7d 0a   #endregion.  }.
2e30: 0a 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 49  .  public enum I
2e40: 6e 64 65 78 54 79 70 65 45 6e 75 6d 0a 20 20 7b  ndexTypeEnum.  {
2e50: 0a 20 20 20 20 49 6e 64 65 78 20 3d 20 30 2c 0a  .    Index = 0,.
2e60: 20 20 20 20 50 72 69 6d 61 72 79 4b 65 79 20 3d      PrimaryKey =
2e70: 20 31 2c 0a 20 20 7d 0a 0a 20 20 5b 44 65 66 61   1,.  }..  [Defa
2e80: 75 6c 74 50 72 6f 70 65 72 74 79 28 22 43 6f 6c  ultProperty("Col
2e90: 75 6d 6e 73 22 29 5d 0a 20 20 69 6e 74 65 72 6e  umns")].  intern
2ea0: 61 6c 20 63 6c 61 73 73 20 49 6e 64 65 78 20 3a  al class Index :
2eb0: 20 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e   IHaveConnection
2ec0: 2c 20 49 43 6c 6f 6e 65 61 62 6c 65 0a 20 20 7b  , ICloneable.  {
2ed0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 54 61 62  .    private Tab
2ee0: 6c 65 20 5f 74 61 62 6c 65 3b 0a 20 20 20 20 69  le _table;.    i
2ef0: 6e 74 65 72 6e 61 6c 20 73 74 72 69 6e 67 20 5f  nternal string _
2f00: 6e 61 6d 65 3b 0a 20 20 20 20 70 72 69 76 61 74  name;.    privat
2f10: 65 20 62 6f 6f 6c 20 5f 75 6e 69 71 75 65 3b 0a  e bool _unique;.
2f20: 20 20 20 20 70 72 69 76 61 74 65 20 4c 69 73 74      private List
2f30: 3c 49 6e 64 65 78 43 6f 6c 75 6d 6e 3e 20 5f 63  <IndexColumn> _c
2f40: 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 4c 69 73  olumns = new Lis
2f50: 74 3c 49 6e 64 65 78 43 6f 6c 75 6d 6e 3e 28 29  t<IndexColumn>()
2f60: 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ;.    private st
2f70: 72 69 6e 67 20 5f 64 65 66 69 6e 69 74 69 6f 6e  ring _definition
2f80: 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f  ;.    private bo
2f90: 6f 6c 20 5f 63 61 6c 63 6e 61 6d 65 3b 0a 20 20  ol _calcname;.  
2fa0: 20 20 69 6e 74 65 72 6e 61 6c 20 43 6f 6e 66 6c    internal Confl
2fb0: 69 63 74 45 6e 75 6d 20 5f 63 6f 6e 66 6c 69 63  ictEnum _conflic
2fc0: 74 20 3d 20 43 6f 6e 66 6c 69 63 74 45 6e 75 6d  t = ConflictEnum
2fd0: 2e 41 62 6f 72 74 3b 0a 20 20 20 20 62 6f 6f 6c  .Abort;.    bool
2fe0: 20 5f 64 69 72 74 79 3b 0a 0a 20 20 20 20 70 72   _dirty;..    pr
2ff0: 6f 74 65 63 74 65 64 20 49 6e 64 65 78 28 49 6e  otected Index(In
3000: 64 65 78 20 73 6f 75 72 63 65 29 0a 20 20 20 20  dex source).    
3010: 7b 0a 20 20 20 20 20 20 5f 74 61 62 6c 65 20 3d  {.      _table =
3020: 20 73 6f 75 72 63 65 2e 5f 74 61 62 6c 65 3b 0a   source._table;.
3030: 20 20 20 20 20 20 5f 6e 61 6d 65 20 3d 20 73 6f        _name = so
3040: 75 72 63 65 2e 5f 6e 61 6d 65 3b 0a 20 20 20 20  urce._name;.    
3050: 20 20 5f 75 6e 69 71 75 65 20 3d 20 73 6f 75 72    _unique = sour
3060: 63 65 2e 5f 75 6e 69 71 75 65 3b 0a 20 20 20 20  ce._unique;.    
3070: 20 20 5f 64 65 66 69 6e 69 74 69 6f 6e 20 3d 20    _definition = 
3080: 73 6f 75 72 63 65 2e 5f 64 65 66 69 6e 69 74 69  source._definiti
3090: 6f 6e 3b 0a 20 20 20 20 20 20 5f 63 6f 6e 66 6c  on;.      _confl
30a0: 69 63 74 20 3d 20 73 6f 75 72 63 65 2e 5f 63 6f  ict = source._co
30b0: 6e 66 6c 69 63 74 3b 0a 20 20 20 20 20 20 5f 64  nflict;.      _d
30c0: 69 72 74 79 20 3d 20 73 6f 75 72 63 65 2e 5f 64  irty = source._d
30d0: 69 72 74 79 3b 0a 0a 20 20 20 20 20 20 66 6f 72  irty;..      for
30e0: 65 61 63 68 20 28 49 6e 64 65 78 43 6f 6c 75 6d  each (IndexColum
30f0: 6e 20 63 20 69 6e 20 73 6f 75 72 63 65 2e 5f 63  n c in source._c
3100: 6f 6c 75 6d 6e 73 29 0a 20 20 20 20 20 20 7b 0a  olumns).      {.
3110: 20 20 20 20 20 20 20 20 49 6e 64 65 78 43 6f 6c          IndexCol
3120: 75 6d 6e 20 63 6f 70 79 20 3d 20 28 28 49 43 6c  umn copy = ((ICl
3130: 6f 6e 65 61 62 6c 65 29 63 29 2e 43 6c 6f 6e 65  oneable)c).Clone
3140: 28 29 20 61 73 20 49 6e 64 65 78 43 6f 6c 75 6d  () as IndexColum
3150: 6e 3b 0a 20 20 20 20 20 20 20 20 63 6f 70 79 2e  n;.        copy.
3160: 5f 70 61 72 65 6e 74 20 3d 20 74 68 69 73 3b 0a  _parent = this;.
3170: 20 20 20 20 20 20 20 20 5f 63 6f 6c 75 6d 6e 73          _columns
3180: 2e 41 64 64 28 63 6f 70 79 29 3b 0a 20 20 20 20  .Add(copy);.    
3190: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69    }.    }..    i
31a0: 6e 74 65 72 6e 61 6c 20 49 6e 64 65 78 28 44 62  nternal Index(Db
31b0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20  Connection cnn, 
31c0: 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 44 61 74  Table table, Dat
31d0: 61 52 6f 77 20 69 6e 64 65 78 29 0a 20 20 20 20  aRow index).    
31e0: 7b 0a 20 20 20 20 20 20 5f 74 61 62 6c 65 20 3d  {.      _table =
31f0: 20 74 61 62 6c 65 3b 0a 20 20 20 20 20 20 69 66   table;.      if
3200: 20 28 69 6e 64 65 78 20 21 3d 20 6e 75 6c 6c 29   (index != null)
3210: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
3220: 20 5f 6e 61 6d 65 20 3d 20 69 6e 64 65 78 5b 22   _name = index["
3230: 49 4e 44 45 58 5f 4e 41 4d 45 22 5d 2e 54 6f 53  INDEX_NAME"].ToS
3240: 74 72 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 20  tring();.       
3250: 20 5f 75 6e 69 71 75 65 20 3d 20 28 62 6f 6f 6c   _unique = (bool
3260: 29 69 6e 64 65 78 5b 22 55 4e 49 51 55 45 22 5d  )index["UNIQUE"]
3270: 3b 0a 20 20 20 20 20 20 20 20 5f 64 65 66 69 6e  ;.        _defin
3280: 69 74 69 6f 6e 20 3d 20 69 6e 64 65 78 5b 22 49  ition = index["I
3290: 4e 44 45 58 5f 44 45 46 49 4e 49 54 49 4f 4e 22  NDEX_DEFINITION"
32a0: 5d 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0a 0a 20  ].ToString();.. 
32b0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 44 61         using (Da
32c0: 74 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 63 6e  taTable tbl = cn
32d0: 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64  n.GetSchema("Ind
32e0: 65 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77 20  exColumns", new 
32f0: 73 74 72 69 6e 67 5b 5d 20 7b 20 74 61 62 6c 65  string[] { table
3300: 2e 43 61 74 61 6c 6f 67 2c 20 6e 75 6c 6c 2c 20  .Catalog, null, 
3310: 74 61 62 6c 65 2e 4e 61 6d 65 2c 20 4e 61 6d 65  table.Name, Name
3320: 20 7d 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20   })).        {. 
3330: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
3340: 20 28 44 61 74 61 52 6f 77 20 72 6f 77 20 69 6e   (DataRow row in
3350: 20 74 62 6c 2e 52 6f 77 73 29 0a 20 20 20 20 20   tbl.Rows).     
3360: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
3370: 20 20 20 5f 63 6f 6c 75 6d 6e 73 2e 41 64 64 28     _columns.Add(
3380: 6e 65 77 20 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  new IndexColumn(
3390: 74 68 69 73 2c 20 72 6f 77 29 29 3b 0a 20 20 20  this, row));.   
33a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
33b0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
33c0: 0a 0a 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61  ..    [DisplayNa
33d0: 6d 65 28 22 49 6e 64 65 78 20 54 79 70 65 22 29  me("Index Type")
33e0: 5d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28  ].    [Category(
33f0: 22 53 74 6f 72 61 67 65 22 29 5d 0a 20 20 20 20  "Storage")].    
3400: 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22 53 70  [Description("Sp
3410: 65 63 69 66 69 65 73 20 77 68 65 74 68 65 72 20  ecifies whether 
3420: 74 68 69 73 20 69 73 20 61 6e 20 69 6e 64 65 78  this is an index
3430: 20 6f 72 20 61 20 70 72 69 6d 61 72 79 20 6b 65   or a primary ke
3440: 79 2e 22 29 5d 0a 20 20 20 20 70 75 62 6c 69 63  y.")].    public
3450: 20 76 69 72 74 75 61 6c 20 49 6e 64 65 78 54 79   virtual IndexTy
3460: 70 65 45 6e 75 6d 20 49 6e 64 65 78 54 79 70 65  peEnum IndexType
3470: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
3480: 20 7b 20 72 65 74 75 72 6e 20 49 6e 64 65 78 54   { return IndexT
3490: 79 70 65 45 6e 75 6d 2e 49 6e 64 65 78 3b 20 7d  ypeEnum.Index; }
34a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67  .    }..    #reg
34b0: 69 6f 6e 20 49 48 61 76 65 43 6f 6e 6e 65 63 74  ion IHaveConnect
34c0: 69 6f 6e 20 4d 65 6d 62 65 72 73 0a 0a 20 20 20  ion Members..   
34d0: 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73   [Browsable(fals
34e0: 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 56  e)].    public V
34f0: 69 65 77 54 61 62 6c 65 42 61 73 65 20 44 65 73  iewTableBase Des
3500: 69 67 6e 54 61 62 6c 65 0a 20 20 20 20 7b 0a 20  ignTable.    {. 
3510: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
3520: 6e 20 5f 74 61 62 6c 65 3b 20 7d 0a 20 20 20 20  n _table; }.    
3530: 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 44 62  }..    public Db
3540: 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74 43 6f  Connection GetCo
3550: 6e 6e 65 63 74 69 6f 6e 28 29 0a 20 20 20 20 7b  nnection().    {
3560: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28  .      return ((
3570: 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 29  IHaveConnection)
3580: 5f 74 61 62 6c 65 29 2e 47 65 74 43 6f 6e 6e 65  _table).GetConne
3590: 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 7d 0a 0a  ction();.    }..
35a0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a      #endregion..
35b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 69 72      internal vir
35c0: 74 75 61 6c 20 76 6f 69 64 20 57 72 69 74 65 53  tual void WriteS
35d0: 71 6c 28 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ql(StringBuilder
35e0: 20 62 75 69 6c 64 65 72 29 0a 20 20 20 20 7b 0a   builder).    {.
35f0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 65 70        string sep
3600: 61 72 61 74 6f 72 20 3d 20 22 22 3b 0a 20 20 20  arator = "";.   
3610: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
3620: 64 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  dFormat(CultureI
3630: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
3640: 74 75 72 65 2c 20 22 43 52 45 41 54 45 20 7b 30  ture, "CREATE {0
3650: 7d 49 4e 44 45 58 20 5b 7b 31 7d 5d 2e 5b 7b 32  }INDEX [{1}].[{2
3660: 7d 5d 20 4f 4e 20 5b 7b 33 7d 5d 20 28 22 2c 20  }] ON [{3}] (", 
3670: 28 5f 75 6e 69 71 75 65 20 3d 3d 20 74 72 75 65  (_unique == true
3680: 29 20 3f 20 22 55 4e 49 51 55 45 20 22 20 3a 20  ) ? "UNIQUE " : 
3690: 22 22 2c 20 5f 74 61 62 6c 65 2e 43 61 74 61 6c  "", _table.Catal
36a0: 6f 67 2c 20 4e 61 6d 65 2c 20 5f 74 61 62 6c 65  og, Name, _table
36b0: 2e 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 66 6f  .Name);.      fo
36c0: 72 65 61 63 68 20 28 49 6e 64 65 78 43 6f 6c 75  reach (IndexColu
36d0: 6d 6e 20 63 20 69 6e 20 43 6f 6c 75 6d 6e 73 29  mn c in Columns)
36e0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
36f0: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46   builder.AppendF
3700: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
3710: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
3720: 72 65 2c 20 22 7b 30 7d 5b 7b 31 7d 5d 22 2c 20  re, "{0}[{1}]", 
3730: 73 65 70 61 72 61 74 6f 72 2c 20 63 2e 43 6f 6c  separator, c.Col
3740: 75 6d 6e 29 3b 0a 20 20 20 20 20 20 20 20 0a 20  umn);.        . 
3750: 20 20 20 20 20 20 20 69 66 20 28 63 2e 53 6f 72         if (c.Sor
3760: 74 4d 6f 64 65 20 21 3d 20 43 6f 6c 75 6d 6e 53  tMode != ColumnS
3770: 6f 72 74 4d 6f 64 65 2e 41 73 63 65 6e 64 69 6e  ortMode.Ascendin
3780: 67 29 0a 20 20 20 20 20 20 20 20 20 20 62 75 69  g).          bui
3790: 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 20 44 45  lder.Append(" DE
37a0: 53 43 22 29 3b 0a 0a 20 20 20 20 20 20 20 20 69  SC");..        i
37b0: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
37c0: 4f 72 45 6d 70 74 79 28 63 2e 43 6f 6c 6c 61 74  OrEmpty(c.Collat
37d0: 65 29 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d  e) && String.Com
37e0: 70 61 72 65 28 63 2e 43 6f 6c 6c 61 74 65 2c 22  pare(c.Collate,"
37f0: 42 49 4e 41 52 59 22 2c 20 53 74 72 69 6e 67 43  BINARY", StringC
3800: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
3810: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 21 3d 20  lIgnoreCase) != 
3820: 30 29 0a 20 20 20 20 20 20 20 20 20 20 62 75 69  0).          bui
3830: 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61  lder.AppendForma
3840: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
3850: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20  variantCulture, 
3860: 22 20 43 4f 4c 4c 41 54 45 20 7b 30 7d 22 2c 20  " COLLATE {0}", 
3870: 63 2e 43 6f 6c 6c 61 74 65 2e 54 6f 55 70 70 65  c.Collate.ToUppe
3880: 72 49 6e 76 61 72 69 61 6e 74 28 29 29 3b 0a 0a  rInvariant());..
3890: 20 20 20 20 20 20 20 20 73 65 70 61 72 61 74 6f          separato
38a0: 72 20 3d 20 22 2c 20 22 3b 0a 20 20 20 20 20 20  r = ", ";.      
38b0: 7d 0a 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e  }.      builder.
38c0: 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 22 29 3b  AppendFormat(");
38d0: 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b  ");.    }..    [
38e0: 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29  Browsable(false)
38f0: 5d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 54  ].    internal T
3900: 61 62 6c 65 20 54 61 62 6c 65 0a 20 20 20 20 7b  able Table.    {
3910: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
3920: 75 72 6e 20 5f 74 61 62 6c 65 3b 20 7d 0a 20 20  urn _table; }.  
3930: 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61    }..    [Browsa
3940: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
3950: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4f 72  public string Or
3960: 69 67 69 6e 61 6c 53 71 6c 0a 20 20 20 20 7b 0a  iginalSql.    {.
3970: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
3980: 72 6e 20 5f 64 65 66 69 6e 69 74 69 6f 6e 3b 20  rn _definition; 
3990: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74  }.    }..    int
39a0: 65 72 6e 61 6c 20 76 6f 69 64 20 4d 61 6b 65 44  ernal void MakeD
39b0: 69 72 74 79 28 29 0a 20 20 20 20 7b 0a 20 20 20  irty().    {.   
39c0: 20 20 20 5f 64 69 72 74 79 20 3d 20 74 72 75 65     _dirty = true
39d0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72  ;.    }..    [Br
39e0: 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a  owsable(false)].
39f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 62 6f 6f      internal boo
3a00: 6c 20 49 73 44 69 72 74 79 0a 20 20 20 20 7b 0a  l IsDirty.    {.
3a10: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
3a20: 72 6e 20 5f 64 69 72 74 79 3b 20 7d 0a 20 20 20  rn _dirty; }.   
3a30: 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c   }..    internal
3a40: 20 76 6f 69 64 20 43 6c 65 61 72 44 69 72 74 79   void ClearDirty
3a50: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f  ().    {.      _
3a60: 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0a 20  dirty = false;. 
3a70: 20 20 20 7d 0a 0a 20 20 20 20 5b 44 65 66 61 75     }..    [Defau
3a80: 6c 74 56 61 6c 75 65 28 66 61 6c 73 65 29 5d 0a  ltValue(false)].
3a90: 20 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e      [Description
3aa0: 28 22 57 68 65 6e 20 73 65 74 20 74 6f 20 74 72  ("When set to tr
3ab0: 75 65 2c 20 74 68 65 20 63 6f 6d 62 69 6e 61 74  ue, the combinat
3ac0: 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 28 73 29  ion of column(s)
3ad0: 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6d 75   of the index mu
3ae0: 73 74 20 62 65 20 61 20 75 6e 69 71 75 65 20 76  st be a unique v
3af0: 61 6c 75 65 2e 22 29 5d 0a 20 20 20 20 70 75 62  alue.")].    pub
3b00: 6c 69 63 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c  lic virtual bool
3b10: 20 55 6e 69 71 75 65 0a 20 20 20 20 7b 0a 20 20   Unique.    {.  
3b20: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
3b30: 20 5f 75 6e 69 71 75 65 3b 20 7d 0a 20 20 20 20   _unique; }.    
3b40: 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    set.      {.  
3b50: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
3b60: 21 3d 20 5f 75 6e 69 71 75 65 29 0a 20 20 20 20  != _unique).    
3b70: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
3b80: 5f 75 6e 69 71 75 65 20 3d 20 76 61 6c 75 65 3b  _unique = value;
3b90: 0a 20 20 20 20 20 20 20 20 20 20 4d 61 6b 65 44  .          MakeD
3ba0: 69 72 74 79 28 29 3b 0a 20 20 20 20 20 20 20 20  irty();.        
3bb0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
3bc0: 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28  .    [Browsable(
3bd0: 66 61 6c 73 65 29 5d 0a 20 20 20 20 70 72 6f 74  false)].    prot
3be0: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 73 74  ected virtual st
3bf0: 72 69 6e 67 20 4e 61 6d 65 50 72 65 66 69 78 0a  ring NamePrefix.
3c00: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20      {.      get 
3c10: 7b 20 72 65 74 75 72 6e 20 22 49 58 22 3b 20 7d  { return "IX"; }
3c20: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f  .    }..    [Bro
3c30: 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20  wsable(false)]. 
3c40: 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
3c50: 74 75 61 6c 20 73 74 72 69 6e 67 20 4e 65 77 4e  tual string NewN
3c60: 61 6d 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ame.    {.      
3c70: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 22 4e 65  get { return "Ne
3c80: 77 49 6e 64 65 78 22 3b 20 7d 0a 20 20 20 20 7d  wIndex"; }.    }
3c90: 0a 0a 20 20 20 20 5b 50 61 72 65 6e 74 68 65 73  ..    [Parenthes
3ca0: 69 7a 65 50 72 6f 70 65 72 74 79 4e 61 6d 65 28  izePropertyName(
3cb0: 74 72 75 65 29 5d 0a 20 20 20 20 5b 52 65 66 72  true)].    [Refr
3cc0: 65 73 68 50 72 6f 70 65 72 74 69 65 73 28 52 65  eshProperties(Re
3cd0: 66 72 65 73 68 50 72 6f 70 65 72 74 69 65 73 2e  freshProperties.
3ce0: 41 6c 6c 29 5d 0a 20 20 20 20 5b 43 61 74 65 67  All)].    [Categ
3cf0: 6f 72 79 28 22 49 64 65 6e 74 69 74 79 22 29 5d  ory("Identity")]
3d00: 0a 20 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f  .    [Descriptio
3d10: 6e 28 22 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  n("The name of t
3d20: 68 65 20 69 6e 64 65 78 2e 22 29 5d 0a 20 20 20  he index.")].   
3d30: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
3d40: 73 74 72 69 6e 67 20 4e 61 6d 65 0a 20 20 20 20  string Name.    
3d50: 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20 20  {.      get.    
3d60: 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28    {.        if (
3d70: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
3d80: 6d 70 74 79 28 5f 6e 61 6d 65 29 29 0a 20 20 20  mpty(_name)).   
3d90: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
3da0: 20 69 66 20 28 5f 63 61 6c 63 6e 61 6d 65 20 3d   if (_calcname =
3db0: 3d 20 74 72 75 65 29 20 72 65 74 75 72 6e 20 47  = true) return G
3dc0: 65 74 48 61 73 68 43 6f 64 65 28 29 2e 54 6f 53  etHashCode().ToS
3dd0: 74 72 69 6e 67 28 29 3b 0a 0a 20 20 20 20 20 20  tring();..      
3de0: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20      string name 
3df0: 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
3e00: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
3e10: 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 7b  riantCulture, "{
3e20: 30 7d 5f 7b 31 7d 22 2c 20 4e 61 6d 65 50 72 65  0}_{1}", NamePre
3e30: 66 69 78 2c 20 4e 65 77 4e 61 6d 65 29 3b 0a 20  fix, NewName);. 
3e40: 20 20 20 20 20 20 20 20 20 69 66 20 28 43 6f 6c           if (Col
3e50: 75 6d 6e 73 2e 43 6f 75 6e 74 20 3e 20 30 20 26  umns.Count > 0 &
3e60: 26 20 4e 65 77 4e 61 6d 65 20 21 3d 20 54 61 62  & NewName != Tab
3e70: 6c 65 2e 4e 61 6d 65 29 0a 20 20 20 20 20 20 20  le.Name).       
3e80: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
3e90: 20 6e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46   name = String.F
3ea0: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
3eb0: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
3ec0: 72 65 2c 20 22 7b 30 7d 5f 22 2c 20 4e 61 6d 65  re, "{0}_", Name
3ed0: 50 72 65 66 69 78 29 3b 0a 20 20 20 20 20 20 20  Prefix);.       
3ee0: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
3ef0: 3d 20 30 3b 20 6e 20 3c 20 43 6f 6c 75 6d 6e 73  = 0; n < Columns
3f00: 2e 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20 20 20  .Count; n++).   
3f10: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
3f20: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e           if (n >
3f30: 20 30 29 20 6e 61 6d 65 20 2b 3d 20 22 5f 22 3b   0) name += "_";
3f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
3f50: 61 6d 65 20 2b 3d 20 43 6f 6c 75 6d 6e 73 5b 6e  ame += Columns[n
3f60: 5d 2e 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20 20  ].Column;.      
3f70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3f80: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 6e    }.          in
3f90: 74 20 63 6f 75 6e 74 20 3d 20 30 3b 0a 20 20 20  t count = 0;.   
3fa0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 72         string pr
3fb0: 6f 70 6f 73 65 64 20 3d 20 6e 61 6d 65 3b 0a 0a  oposed = name;..
3fc0: 20 20 20 20 20 20 20 20 20 20 5f 63 61 6c 63 6e            _calcn
3fd0: 61 6d 65 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  ame = true;.    
3fe0: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
3ff0: 20 3d 20 30 3b 20 6e 20 3c 20 5f 74 61 62 6c 65   = 0; n < _table
4000: 2e 49 6e 64 65 78 65 73 2e 43 6f 75 6e 74 3b 20  .Indexes.Count; 
4010: 6e 2b 2b 29 0a 20 20 20 20 20 20 20 20 20 20 7b  n++).          {
4020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 64  .            Ind
4030: 65 78 20 69 64 78 20 3d 20 5f 74 61 62 6c 65 2e  ex idx = _table.
4040: 49 6e 64 65 78 65 73 5b 6e 5d 3b 0a 20 20 20 20  Indexes[n];.    
4050: 20 20 20 20 20 20 20 20 70 72 6f 70 6f 73 65 64          proposed
4060: 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
4070: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
4080: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22  ariantCulture, "
4090: 7b 30 7d 7b 31 7d 22 2c 20 6e 61 6d 65 2c 20 28  {0}{1}", name, (
40a0: 63 6f 75 6e 74 20 3e 20 30 29 20 3f 20 63 6f 75  count > 0) ? cou
40b0: 6e 74 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a 20  nt.ToString() : 
40c0: 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  "");.           
40d0: 20 69 66 20 28 69 64 78 2e 4e 61 6d 65 20 3d 3d   if (idx.Name ==
40e0: 20 70 72 6f 70 6f 73 65 64 29 0a 20 20 20 20 20   proposed).     
40f0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
4100: 20 20 20 20 20 20 20 63 6f 75 6e 74 2b 2b 3b 0a         count++;.
4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20                n 
4120: 3d 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 20 20  = -1;.          
4130: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a    }.          }.
4140: 20 20 20 20 20 20 20 20 20 20 5f 63 61 6c 63 6e            _calcn
4150: 61 6d 65 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  ame = false;.   
4160: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 72         return pr
4170: 6f 70 6f 73 65 64 3b 0a 20 20 20 20 20 20 20 20  oposed;.        
4180: 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
4190: 20 5f 6e 61 6d 65 3b 0a 20 20 20 20 20 20 7d 0a   _name;.      }.
41a0: 20 20 20 20 20 20 73 65 74 0a 20 20 20 20 20 20        set.      
41b0: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 76 61  {.        if (va
41c0: 6c 75 65 20 21 3d 20 5f 6e 61 6d 65 29 0a 20 20  lue != _name).  
41d0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
41e0: 20 20 5f 6e 61 6d 65 20 3d 20 76 61 6c 75 65 3b    _name = value;
41f0: 0a 20 20 20 20 20 20 20 20 20 20 4d 61 6b 65 44  .          MakeD
4200: 69 72 74 79 28 29 3b 0a 20 20 20 20 20 20 20 20  irty();.        
4210: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
4220: 0a 20 20 20 20 5b 54 79 70 65 43 6f 6e 76 65 72  .    [TypeConver
4230: 74 65 72 28 74 79 70 65 6f 66 28 49 6e 64 65 78  ter(typeof(Index
4240: 54 79 70 65 43 6f 6e 76 65 72 74 65 72 29 29 5d  TypeConverter))]
4250: 0a 20 20 20 20 5b 45 64 69 74 6f 72 28 74 79 70  .    [Editor(typ
4260: 65 6f 66 28 49 6e 64 65 78 43 6f 6c 75 6d 6e 45  eof(IndexColumnE
4270: 64 69 74 6f 72 29 2c 20 74 79 70 65 6f 66 28 55  ditor), typeof(U
4280: 49 54 79 70 65 45 64 69 74 6f 72 29 29 5d 0a 20  ITypeEditor))]. 
4290: 20 20 20 5b 52 65 66 72 65 73 68 50 72 6f 70 65     [RefreshPrope
42a0: 72 74 69 65 73 28 52 65 66 72 65 73 68 50 72 6f  rties(RefreshPro
42b0: 70 65 72 74 69 65 73 2e 41 6c 6c 29 5d 0a 20 20  perties.All)].  
42c0: 20 20 5b 43 61 74 65 67 6f 72 79 28 22 53 6f 75    [Category("Sou
42d0: 72 63 65 22 29 5d 0a 20 20 20 20 5b 44 65 73 63  rce")].    [Desc
42e0: 72 69 70 74 69 6f 6e 28 22 54 68 65 20 63 6f 6c  ription("The col
42f0: 75 6d 6e 28 73 29 20 74 6f 20 62 65 20 69 6e 64  umn(s) to be ind
4300: 65 78 65 64 2e 22 29 5d 0a 20 20 20 20 5b 4e 6f  exed.")].    [No
4310: 74 69 66 79 50 61 72 65 6e 74 50 72 6f 70 65 72  tifyParentProper
4320: 74 79 28 74 72 75 65 29 5d 0a 20 20 20 20 70 75  ty(true)].    pu
4330: 62 6c 69 63 20 4c 69 73 74 3c 49 6e 64 65 78 43  blic List<IndexC
4340: 6f 6c 75 6d 6e 3e 20 43 6f 6c 75 6d 6e 73 0a 20  olumn> Columns. 
4350: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b     {.      get {
4360: 20 72 65 74 75 72 6e 20 5f 63 6f 6c 75 6d 6e 73   return _columns
4370: 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  ; }.    }..    #
4380: 72 65 67 69 6f 6e 20 49 43 6c 6f 6e 65 61 62 6c  region ICloneabl
4390: 65 20 4d 65 6d 62 65 72 73 0a 0a 20 20 20 20 6f  e Members..    o
43a0: 62 6a 65 63 74 20 49 43 6c 6f 6e 65 61 62 6c 65  bject ICloneable
43b0: 2e 43 6c 6f 6e 65 28 29 0a 20 20 20 20 7b 0a 20  .Clone().    {. 
43c0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
43d0: 49 6e 64 65 78 28 74 68 69 73 29 3b 0a 20 20 20  Index(this);.   
43e0: 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
43f0: 6f 6e 0a 20 20 7d 0a 0a 20 20 70 75 62 6c 69 63  on.  }..  public
4400: 20 63 6c 61 73 73 20 43 6f 6c 75 6d 6e 73 4d 75   class ColumnsMu
4410: 6c 74 69 53 65 6c 65 63 74 45 64 69 74 6f 72 20  ltiSelectEditor 
4420: 3a 20 55 49 54 79 70 65 45 64 69 74 6f 72 0a 20  : UITypeEditor. 
4430: 20 7b 0a 20 20 20 20 70 72 69 76 61 74 65 20 53   {.    private S
4440: 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 46 6f  ystem.Windows.Fo
4450: 72 6d 73 2e 44 65 73 69 67 6e 2e 49 57 69 6e 64  rms.Design.IWind
4460: 6f 77 73 46 6f 72 6d 73 45 64 69 74 6f 72 53 65  owsFormsEditorSe
4470: 72 76 69 63 65 20 5f 65 64 53 76 63 3b 0a 20 20  rvice _edSvc;.  
4480: 20 20 70 72 69 76 61 74 65 20 43 68 65 63 6b 65    private Checke
4490: 64 4c 69 73 74 42 6f 78 20 5f 6c 69 73 74 3b 0a  dListBox _list;.
44a0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
44b0: 20 5f 63 61 6e 63 65 6c 3b 0a 0a 20 20 20 20 70   _cancel;..    p
44c0: 75 62 6c 69 63 20 43 6f 6c 75 6d 6e 73 4d 75 6c  ublic ColumnsMul
44d0: 74 69 53 65 6c 65 63 74 45 64 69 74 6f 72 28 29  tiSelectEditor()
44e0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 2f 2f 20  .    {.      // 
44f0: 62 75 69 6c 64 20 73 65 6c 65 63 74 6f 72 20 6c  build selector l
4500: 69 73 74 0a 20 20 20 20 20 20 5f 6c 69 73 74 20  ist.      _list 
4510: 3d 20 6e 65 77 20 43 68 65 63 6b 65 64 4c 69 73  = new CheckedLis
4520: 74 42 6f 78 28 29 3b 0a 20 20 20 20 20 20 5f 6c  tBox();.      _l
4530: 69 73 74 2e 42 6f 72 64 65 72 53 74 79 6c 65 20  ist.BorderStyle 
4540: 3d 20 42 6f 72 64 65 72 53 74 79 6c 65 2e 46 69  = BorderStyle.Fi
4550: 78 65 64 53 69 6e 67 6c 65 3b 0a 20 20 20 20 20  xedSingle;.     
4560: 20 5f 6c 69 73 74 2e 43 68 65 63 6b 4f 6e 43 6c   _list.CheckOnCl
4570: 69 63 6b 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  ick = true;.    
4580: 20 20 5f 6c 69 73 74 2e 54 68 72 65 65 44 43 68    _list.ThreeDCh
4590: 65 63 6b 42 6f 78 65 73 20 3d 20 66 61 6c 73 65  eckBoxes = false
45a0: 3b 0a 20 20 20 20 20 20 5f 6c 69 73 74 2e 4b 65  ;.      _list.Ke
45b0: 79 50 72 65 73 73 20 2b 3d 20 6e 65 77 20 4b 65  yPress += new Ke
45c0: 79 50 72 65 73 73 45 76 65 6e 74 48 61 6e 64 6c  yPressEventHandl
45d0: 65 72 28 5f 6c 69 73 74 5f 4b 65 79 50 72 65 73  er(_list_KeyPres
45e0: 73 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b  s);.    }..    [
45f0: 50 65 72 6d 69 73 73 69 6f 6e 53 65 74 28 53 65  PermissionSet(Se
4600: 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c 69 6e  curityAction.Lin
4610: 6b 44 65 6d 61 6e 64 2c 20 4e 61 6d 65 20 3d 20  kDemand, Name = 
4620: 22 46 75 6c 6c 54 72 75 73 74 22 29 5d 0a 20 20  "FullTrust")].  
4630: 20 20 6f 76 65 72 72 69 64 65 20 70 75 62 6c 69    override publi
4640: 63 20 55 49 54 79 70 65 45 64 69 74 6f 72 45 64  c UITypeEditorEd
4650: 69 74 53 74 79 6c 65 20 47 65 74 45 64 69 74 53  itStyle GetEditS
4660: 74 79 6c 65 28 49 54 79 70 65 44 65 73 63 72 69  tyle(ITypeDescri
4670: 70 74 6f 72 43 6f 6e 74 65 78 74 20 63 74 78 29  ptorContext ctx)
4680: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
4690: 75 72 6e 20 55 49 54 79 70 65 45 64 69 74 6f 72  urn UITypeEditor
46a0: 45 64 69 74 53 74 79 6c 65 2e 44 72 6f 70 44 6f  EditStyle.DropDo
46b0: 77 6e 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b  wn;.    }..    [
46c0: 50 65 72 6d 69 73 73 69 6f 6e 53 65 74 28 53 65  PermissionSet(Se
46d0: 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c 69 6e  curityAction.Lin
46e0: 6b 44 65 6d 61 6e 64 2c 20 4e 61 6d 65 20 3d 20  kDemand, Name = 
46f0: 22 46 75 6c 6c 54 72 75 73 74 22 29 5d 0a 20 20  "FullTrust")].  
4700: 20 20 6f 76 65 72 72 69 64 65 20 70 75 62 6c 69    override publi
4710: 63 20 6f 62 6a 65 63 74 20 45 64 69 74 56 61 6c  c object EditVal
4720: 75 65 28 49 54 79 70 65 44 65 73 63 72 69 70 74  ue(ITypeDescript
4730: 6f 72 43 6f 6e 74 65 78 74 20 63 74 78 2c 20 49  orContext ctx, I
4740: 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 20  ServiceProvider 
4750: 70 72 6f 76 69 64 65 72 2c 20 6f 62 6a 65 63 74  provider, object
4760: 20 76 61 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20   value).    {.  
4770: 20 20 20 20 49 6e 64 65 78 20 69 64 78 20 3d 20      Index idx = 
4780: 63 74 78 2e 49 6e 73 74 61 6e 63 65 20 61 73 20  ctx.Instance as 
4790: 49 6e 64 65 78 3b 0a 20 20 20 20 20 20 54 72 69  Index;.      Tri
47a0: 67 67 65 72 20 74 72 69 67 20 3d 20 63 74 78 2e  gger trig = ctx.
47b0: 49 6e 73 74 61 6e 63 65 20 61 73 20 54 72 69 67  Instance as Trig
47c0: 67 65 72 3b 0a 20 20 20 20 20 20 56 69 65 77 54  ger;.      ViewT
47d0: 61 62 6c 65 42 61 73 65 20 70 61 72 65 6e 74 20  ableBase parent 
47e0: 3d 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 20 20 69  = null;..      i
47f0: 66 20 28 69 64 78 20 21 3d 20 6e 75 6c 6c 29 20  f (idx != null) 
4800: 70 61 72 65 6e 74 20 3d 20 69 64 78 2e 54 61 62  parent = idx.Tab
4810: 6c 65 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 69  le;.      else i
4820: 66 20 28 74 72 69 67 20 21 3d 20 6e 75 6c 6c 29  f (trig != null)
4830: 20 70 61 72 65 6e 74 20 3d 20 74 72 69 67 2e 56   parent = trig.V
4840: 69 65 77 54 61 62 6c 65 42 61 73 65 3b 0a 0a 20  iewTableBase;.. 
4850: 20 20 20 20 20 2f 2f 20 69 6e 69 74 69 61 6c 69       // initiali
4860: 7a 65 20 65 64 69 74 6f 72 20 73 65 72 76 69 63  ze editor servic
4870: 65 0a 20 20 20 20 20 20 5f 65 64 53 76 63 20 3d  e.      _edSvc =
4880: 20 28 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73   (System.Windows
4890: 2e 46 6f 72 6d 73 2e 44 65 73 69 67 6e 2e 49 57  .Forms.Design.IW
48a0: 69 6e 64 6f 77 73 46 6f 72 6d 73 45 64 69 74 6f  indowsFormsEdito
48b0: 72 53 65 72 76 69 63 65 29 70 72 6f 76 69 64 65  rService)provide
48c0: 72 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  r.GetService(typ
48d0: 65 6f 66 28 53 79 73 74 65 6d 2e 57 69 6e 64 6f  eof(System.Windo
48e0: 77 73 2e 46 6f 72 6d 73 2e 44 65 73 69 67 6e 2e  ws.Forms.Design.
48f0: 49 57 69 6e 64 6f 77 73 46 6f 72 6d 73 45 64 69  IWindowsFormsEdi
4900: 74 6f 72 53 65 72 76 69 63 65 29 29 3b 0a 20 20  torService));.  
4910: 20 20 20 20 69 66 20 28 5f 65 64 53 76 63 20 3d      if (_edSvc =
4920: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
4930: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0a 0a 20  return value;.. 
4940: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
4950: 3d 20 6e 75 6c 6c 29 20 76 61 6c 75 65 20 3d 20  = null) value = 
4960: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0a 20 20  String.Empty;.  
4970: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
4980: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 76 61 6c  sNullOrEmpty(val
4990: 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 20 3d  ue.ToString()) =
49a0: 3d 20 74 72 75 65 29 20 76 61 6c 75 65 20 3d 20  = true) value = 
49b0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0a 0a 20  String.Empty;.. 
49c0: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 76 61       string[] va
49d0: 6c 75 65 73 20 3d 20 76 61 6c 75 65 2e 54 6f 53  lues = value.ToS
49e0: 74 72 69 6e 67 28 29 2e 53 70 6c 69 74 28 27 2c  tring().Split(',
49f0: 27 29 3b 0a 20 20 20 20 20 20 0a 20 20 20 20 20  ');.      .     
4a00: 20 2f 2f 20 70 6f 70 75 6c 61 74 65 20 74 68 65   // populate the
4a10: 20 6c 69 73 74 0a 20 20 20 20 20 20 5f 6c 69 73   list.      _lis
4a20: 74 2e 49 74 65 6d 73 2e 43 6c 65 61 72 28 29 3b  t.Items.Clear();
4a30: 0a 0a 20 20 20 20 20 20 69 66 20 28 70 61 72 65  ..      if (pare
4a40: 6e 74 20 69 73 20 54 61 62 6c 65 29 0a 20 20 20  nt is Table).   
4a50: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 72     {.        for
4a60: 65 61 63 68 20 28 43 6f 6c 75 6d 6e 20 63 20 69  each (Column c i
4a70: 6e 20 28 28 54 61 62 6c 65 29 70 61 72 65 6e 74  n ((Table)parent
4a80: 29 2e 43 6f 6c 75 6d 6e 73 29 0a 20 20 20 20 20  ).Columns).     
4a90: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 43     {.          C
4aa0: 68 65 63 6b 53 74 61 74 65 20 63 68 65 63 6b 20  heckState check 
4ab0: 3d 20 43 68 65 63 6b 53 74 61 74 65 2e 55 6e 63  = CheckState.Unc
4ac0: 68 65 63 6b 65 64 3b 0a 20 20 20 20 20 20 20 20  hecked;.        
4ad0: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
4ae0: 3b 20 6e 20 3c 20 76 61 6c 75 65 73 2e 4c 65 6e  ; n < values.Len
4af0: 67 74 68 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20  gth; n++).      
4b00: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
4b10: 20 20 69 66 20 28 76 61 6c 75 65 73 5b 6e 5d 2e    if (values[n].
4b20: 54 72 69 6d 28 29 20 3d 3d 20 53 74 72 69 6e 67  Trim() == String
4b30: 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
4b40: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
4b50: 74 75 72 65 2c 20 22 5b 7b 30 7d 5d 22 2c 20 63  ture, "[{0}]", c
4b60: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 29 29 0a 20 20  .ColumnName)).  
4b70: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
4b80: 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 20            check 
4b90: 3d 20 43 68 65 63 6b 53 74 61 74 65 2e 43 68 65  = CheckState.Che
4ba0: 63 6b 65 64 3b 0a 20 20 20 20 20 20 20 20 20 20  cked;.          
4bb0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
4bc0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4bd0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 5f     }.          _
4be0: 6c 69 73 74 2e 49 74 65 6d 73 2e 41 64 64 28 63  list.Items.Add(c
4bf0: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 63 68 65  .ColumnName, che
4c00: 63 6b 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ck);.        }. 
4c10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65 6c 73       }.      els
4c20: 65 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  e.      {.      
4c30: 20 20 74 72 79 0a 20 20 20 20 20 20 20 20 7b 0a    try.        {.
4c40: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
4c50: 28 44 62 43 6f 6d 6d 61 6e 64 20 63 6d 64 20 3d  (DbCommand cmd =
4c60: 20 74 72 69 67 2e 47 65 74 43 6f 6e 6e 65 63 74   trig.GetConnect
4c70: 69 6f 6e 28 29 2e 43 72 65 61 74 65 43 6f 6d 6d  ion().CreateComm
4c80: 61 6e 64 28 29 29 0a 20 20 20 20 20 20 20 20 20  and()).         
4c90: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63   {.            c
4ca0: 6d 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  md.CommandText =
4cb0: 20 28 28 56 69 65 77 29 70 61 72 65 6e 74 29 2e   ((View)parent).
4cc0: 53 71 6c 54 65 78 74 3b 0a 20 20 20 20 20 20 20  SqlText;.       
4cd0: 20 20 20 20 20 75 73 69 6e 67 20 28 44 62 44 61       using (DbDa
4ce0: 74 61 52 65 61 64 65 72 20 72 65 61 64 65 72 20  taReader reader 
4cf0: 3d 20 63 6d 64 2e 45 78 65 63 75 74 65 52 65 61  = cmd.ExecuteRea
4d00: 64 65 72 28 43 6f 6d 6d 61 6e 64 42 65 68 61 76  der(CommandBehav
4d10: 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 29  ior.SchemaOnly))
4d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
4d30: 6e 67 20 28 44 61 74 61 54 61 62 6c 65 20 74 62  ng (DataTable tb
4d40: 6c 20 3d 20 72 65 61 64 65 72 2e 47 65 74 53 63  l = reader.GetSc
4d50: 68 65 6d 61 54 61 62 6c 65 28 29 29 0a 20 20 20  hemaTable()).   
4d60: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
4d70: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
4d80: 20 28 44 61 74 61 52 6f 77 20 72 6f 77 20 69 6e   (DataRow row in
4d90: 20 74 62 6c 2e 52 6f 77 73 29 0a 20 20 20 20 20   tbl.Rows).     
4da0: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
4db0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
4dc0: 53 74 61 74 65 20 63 68 65 63 6b 20 3d 20 43 68  State check = Ch
4dd0: 65 63 6b 53 74 61 74 65 2e 55 6e 63 68 65 63 6b  eckState.Uncheck
4de0: 65 64 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed;.            
4df0: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
4e00: 20 30 3b 20 6e 20 3c 20 76 61 6c 75 65 73 2e 4c   0; n < values.L
4e10: 65 6e 67 74 68 3b 20 6e 2b 2b 29 0a 20 20 20 20  ength; n++).    
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e40: 69 66 20 28 76 61 6c 75 65 73 5b 6e 5d 2e 54 72  if (values[n].Tr
4e50: 69 6d 28 29 20 3d 3d 20 53 74 72 69 6e 67 2e 46  im() == String.F
4e60: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
4e70: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
4e80: 72 65 2c 20 22 5b 7b 30 7d 5d 22 2c 20 72 6f 77  re, "[{0}]", row
4e90: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
4ea0: 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 29 29  mn.ColumnName]))
4eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ec0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
4ed0: 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 20 3d           check =
4ee0: 20 43 68 65 63 6b 53 74 61 74 65 2e 43 68 65 63   CheckState.Chec
4ef0: 6b 65 64 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ked;.           
4f00: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
4f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f20: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
4f30: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
4f40: 20 20 20 20 20 20 5f 6c 69 73 74 2e 49 74 65 6d        _list.Item
4f50: 73 2e 41 64 64 28 72 6f 77 5b 53 63 68 65 6d 61  s.Add(row[Schema
4f60: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
4f70: 6d 6e 4e 61 6d 65 5d 2e 54 6f 53 74 72 69 6e 67  mnName].ToString
4f80: 28 29 2c 20 63 68 65 63 6b 29 3b 0a 20 20 20 20  (), check);.    
4f90: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
4fa0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4fb0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
4fc0: 20 20 20 20 20 20 20 20 63 61 74 63 68 0a 20 20          catch.  
4fd0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
4fe0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
4ff0: 5f 6c 69 73 74 2e 48 65 69 67 68 74 20 3d 20 4d  _list.Height = M
5000: 61 74 68 2e 4d 69 6e 28 33 30 30 2c 20 28 5f 6c  ath.Min(300, (_l
5010: 69 73 74 2e 49 74 65 6d 73 2e 43 6f 75 6e 74 20  ist.Items.Count 
5020: 2b 20 31 29 20 2a 20 5f 6c 69 73 74 2e 46 6f 6e  + 1) * _list.Fon
5030: 74 2e 48 65 69 67 68 74 29 3b 0a 0a 20 20 20 20  t.Height);..    
5040: 20 20 2f 2f 20 73 68 6f 77 20 74 68 65 20 6c 69    // show the li
5050: 73 74 0a 20 20 20 20 20 20 5f 63 61 6e 63 65 6c  st.      _cancel
5060: 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20   = false;.      
5070: 5f 65 64 53 76 63 2e 44 72 6f 70 44 6f 77 6e 43  _edSvc.DropDownC
5080: 6f 6e 74 72 6f 6c 28 5f 6c 69 73 74 29 3b 0a 0a  ontrol(_list);..
5090: 20 20 20 20 20 20 2f 2f 20 62 75 69 6c 64 20 72        // build r
50a0: 65 74 75 72 6e 20 76 61 6c 75 65 20 66 72 6f 6d  eturn value from
50b0: 20 63 68 65 63 6b 65 64 20 69 74 65 6d 73 20 6f   checked items o
50c0: 6e 20 74 68 65 20 6c 69 73 74 0a 20 20 20 20 20  n the list.     
50d0: 20 69 66 20 28 21 5f 63 61 6e 63 65 6c 29 0a 20   if (!_cancel). 
50e0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 2f       {.        /
50f0: 2f 20 62 75 69 6c 64 20 61 20 63 6f 6d 6d 61 2d  / build a comma-
5100: 64 65 6c 69 6d 69 74 65 64 20 73 74 72 69 6e 67  delimited string
5110: 20 77 69 74 68 20 74 68 65 20 63 68 65 63 6b 65   with the checke
5120: 64 20 69 74 65 6d 73 0a 20 20 20 20 20 20 20 20  d items.        
5130: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 73 62  StringBuilder sb
5140: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
5150: 6c 64 65 72 28 29 3b 0a 20 20 20 20 20 20 20 20  lder();.        
5160: 66 6f 72 65 61 63 68 20 28 6f 62 6a 65 63 74 20  foreach (object 
5170: 69 74 65 6d 20 69 6e 20 5f 6c 69 73 74 2e 43 68  item in _list.Ch
5180: 65 63 6b 65 64 49 74 65 6d 73 29 0a 20 20 20 20  eckedItems).    
5190: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
51a0: 69 66 20 28 73 62 2e 4c 65 6e 67 74 68 20 3e 20  if (sb.Length > 
51b0: 30 29 20 73 62 2e 41 70 70 65 6e 64 28 22 2c 20  0) sb.Append(", 
51c0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 62  ");.          sb
51d0: 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 22 5b  .AppendFormat("[
51e0: 7b 30 7d 5d 22 2c 20 69 74 65 6d 2e 54 6f 53 74  {0}]", item.ToSt
51f0: 72 69 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 20  ring());.       
5200: 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
5210: 72 6e 20 73 62 2e 54 6f 53 74 72 69 6e 67 28 29  rn sb.ToString()
5220: 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
5230: 20 2f 2f 20 64 6f 6e 65 0a 20 20 20 20 20 20 72   // done.      r
5240: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0a 20 20 20  eturn value;.   
5250: 20 7d 0a 0a 20 20 20 20 2f 2f 20 2a 2a 20 65 76   }..    // ** ev
5260: 65 6e 74 20 68 61 6e 64 6c 65 72 73 0a 0a 20 20  ent handlers..  
5270: 20 20 2f 2f 20 63 6c 6f 73 65 20 65 64 69 74 6f    // close edito
5280: 72 20 69 66 20 74 68 65 20 75 73 65 72 20 70 72  r if the user pr
5290: 65 73 73 65 73 20 65 6e 74 65 72 20 6f 72 20 65  esses enter or e
52a0: 73 63 61 70 65 0a 20 20 20 20 70 72 69 76 61 74  scape.    privat
52b0: 65 20 76 6f 69 64 20 5f 6c 69 73 74 5f 4b 65 79  e void _list_Key
52c0: 50 72 65 73 73 28 6f 62 6a 65 63 74 20 73 65 6e  Press(object sen
52d0: 64 65 72 2c 20 4b 65 79 50 72 65 73 73 45 76 65  der, KeyPressEve
52e0: 6e 74 41 72 67 73 20 65 29 0a 20 20 20 20 7b 0a  ntArgs e).    {.
52f0: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 2e        switch (e.
5300: 4b 65 79 43 68 61 72 29 0a 20 20 20 20 20 20 7b  KeyChar).      {
5310: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 28 63  .        case (c
5320: 68 61 72 29 32 37 3a 0a 20 20 20 20 20 20 20 20  har)27:.        
5330: 20 20 5f 63 61 6e 63 65 6c 20 3d 20 74 72 75 65    _cancel = true
5340: 3b 0a 20 20 20 20 20 20 20 20 20 20 5f 65 64 53  ;.          _edS
5350: 76 63 2e 43 6c 6f 73 65 44 72 6f 70 44 6f 77 6e  vc.CloseDropDown
5360: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72  ();.          br
5370: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
5380: 65 20 28 63 68 61 72 29 31 33 3a 0a 20 20 20 20  e (char)13:.    
5390: 20 20 20 20 20 20 5f 65 64 53 76 63 2e 43 6c 6f        _edSvc.Clo
53a0: 73 65 44 72 6f 70 44 6f 77 6e 28 29 3b 0a 20 20  seDropDown();.  
53b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
53c0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
53d0: 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61  ..  internal cla
53e0: 73 73 20 43 6f 6c 75 6d 6e 73 54 79 70 65 45 64  ss ColumnsTypeEd
53f0: 69 74 6f 72 20 3a 20 4f 62 6a 65 63 74 53 65 6c  itor : ObjectSel
5400: 65 63 74 6f 72 45 64 69 74 6f 72 0a 20 20 7b 0a  ectorEditor.  {.
5410: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
5420: 69 64 65 20 55 49 54 79 70 65 45 64 69 74 6f 72  ide UITypeEditor
5430: 45 64 69 74 53 74 79 6c 65 20 47 65 74 45 64 69  EditStyle GetEdi
5440: 74 53 74 79 6c 65 28 49 54 79 70 65 44 65 73 63  tStyle(ITypeDesc
5450: 72 69 70 74 6f 72 43 6f 6e 74 65 78 74 20 63 6f  riptorContext co
5460: 6e 74 65 78 74 29 0a 20 20 20 20 7b 0a 20 20 20  ntext).    {.   
5470: 20 20 20 72 65 74 75 72 6e 20 55 49 54 79 70 65     return UIType
5480: 45 64 69 74 6f 72 45 64 69 74 53 74 79 6c 65 2e  EditorEditStyle.
5490: 44 72 6f 70 44 6f 77 6e 3b 0a 20 20 20 20 7d 0a  DropDown;.    }.
54a0: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f  .    protected o
54b0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 46 69 6c  verride void Fil
54c0: 6c 54 72 65 65 57 69 74 68 44 61 74 61 28 53 65  lTreeWithData(Se
54d0: 6c 65 63 74 6f 72 20 73 65 6c 65 63 74 6f 72 2c  lector selector,
54e0: 20 49 54 79 70 65 44 65 73 63 72 69 70 74 6f 72   ITypeDescriptor
54f0: 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74 2c  Context context,
5500: 20 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65   IServiceProvide
5510: 72 20 70 72 6f 76 69 64 65 72 29 0a 20 20 20 20  r provider).    
5520: 7b 0a 20 20 20 20 20 20 62 61 73 65 2e 46 69 6c  {.      base.Fil
5530: 6c 54 72 65 65 57 69 74 68 44 61 74 61 28 73 65  lTreeWithData(se
5540: 6c 65 63 74 6f 72 2c 20 63 6f 6e 74 65 78 74 2c  lector, context,
5550: 20 70 72 6f 76 69 64 65 72 29 3b 0a 20 20 20 20   provider);.    
5560: 20 20 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f    IHaveConnectio
5570: 6e 53 63 6f 70 65 20 73 6f 75 72 63 65 20 3d 20  nScope source = 
5580: 63 6f 6e 74 65 78 74 2e 49 6e 73 74 61 6e 63 65  context.Instance
5590: 20 61 73 20 49 48 61 76 65 43 6f 6e 6e 65 63 74   as IHaveConnect
55a0: 69 6f 6e 53 63 6f 70 65 3b 0a 20 20 20 20 20 20  ionScope;.      
55b0: 56 69 65 77 54 61 62 6c 65 42 61 73 65 20 64 65  ViewTableBase de
55c0: 73 69 67 6e 3b 0a 0a 20 20 20 20 20 20 69 66 20  sign;..      if 
55d0: 28 73 6f 75 72 63 65 20 3d 3d 20 6e 75 6c 6c 29  (source == null)
55e0: 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20   return;..      
55f0: 64 65 73 69 67 6e 20 3d 20 73 6f 75 72 63 65 2e  design = source.
5600: 44 65 73 69 67 6e 54 61 62 6c 65 3b 0a 0a 20 20  DesignTable;..  
5610: 20 20 20 20 69 66 20 28 64 65 73 69 67 6e 2e 4e      if (design.N
5620: 61 6d 65 20 21 3d 20 73 6f 75 72 63 65 2e 54 61  ame != source.Ta
5630: 62 6c 65 53 63 6f 70 65 29 0a 20 20 20 20 20 20  bleScope).      
5640: 7b 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67 20  {.        using 
5650: 28 44 61 74 61 54 61 62 6c 65 20 74 61 62 6c 65  (DataTable table
5660: 20 3d 20 73 6f 75 72 63 65 2e 47 65 74 43 6f 6e   = source.GetCon
5670: 6e 65 63 74 69 6f 6e 28 29 2e 47 65 74 53 63 68  nection().GetSch
5680: 65 6d 61 28 22 43 6f 6c 75 6d 6e 73 22 2c 20 6e  ema("Columns", n
5690: 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 20 73 6f  ew string[] { so
56a0: 75 72 63 65 2e 43 61 74 61 6c 6f 67 53 63 6f 70  urce.CatalogScop
56b0: 65 2c 20 6e 75 6c 6c 2c 20 73 6f 75 72 63 65 2e  e, null, source.
56c0: 54 61 62 6c 65 53 63 6f 70 65 20 7d 29 29 0a 20  TableScope })). 
56d0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
56e0: 20 20 20 66 6f 72 65 61 63 68 20 28 44 61 74 61     foreach (Data
56f0: 52 6f 77 20 72 6f 77 20 69 6e 20 74 61 62 6c 65  Row row in table
5700: 2e 52 6f 77 73 29 0a 20 20 20 20 20 20 20 20 20  .Rows).         
5710: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
5720: 65 6c 65 63 74 6f 72 2e 41 64 64 4e 6f 64 65 28  elector.AddNode(
5730: 72 6f 77 5b 33 5d 2e 54 6f 53 74 72 69 6e 67 28  row[3].ToString(
5740: 29 2c 20 72 6f 77 5b 33 5d 2c 20 6e 75 6c 6c 29  ), row[3], null)
5750: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
5760: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
5770: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
5780: 20 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65   {.        Table
5790: 20 74 62 6c 20 3d 20 64 65 73 69 67 6e 20 61 73   tbl = design as
57a0: 20 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 20 20   Table;.        
57b0: 69 66 20 28 74 62 6c 20 21 3d 20 6e 75 6c 6c 29  if (tbl != null)
57c0: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
57d0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 43 6f       foreach (Co
57e0: 6c 75 6d 6e 20 63 20 69 6e 20 74 62 6c 2e 43 6f  lumn c in tbl.Co
57f0: 6c 75 6d 6e 73 29 0a 20 20 20 20 20 20 20 20 20  lumns).         
5800: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
5810: 65 6c 65 63 74 6f 72 2e 41 64 64 4e 6f 64 65 28  elector.AddNode(
5820: 63 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 63 2e  c.ColumnName, c.
5830: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 6e 75 6c 6c  ColumnName, null
5840: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
5850: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
5860: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c  .    }..    publ
5870: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
5880: 20 49 73 44 72 6f 70 44 6f 77 6e 52 65 73 69 7a   IsDropDownResiz
5890: 61 62 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20 20  able.    {.     
58a0: 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20   get.      {.   
58b0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
58c0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
58d0: 20 20 7d 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20    }..  internal 
58e0: 63 6c 61 73 73 20 54 61 62 6c 65 73 54 79 70 65  class TablesType
58f0: 45 64 69 74 6f 72 20 3a 20 4f 62 6a 65 63 74 53  Editor : ObjectS
5900: 65 6c 65 63 74 6f 72 45 64 69 74 6f 72 0a 20 20  electorEditor.  
5910: 7b 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  {.    public ove
5920: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 44 72 6f  rride bool IsDro
5930: 70 44 6f 77 6e 52 65 73 69 7a 61 62 6c 65 0a 20  pDownResizable. 
5940: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20     {.      get. 
5950: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72       {.        r
5960: 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20  eturn true;.    
5970: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70    }.    }..    p
5980: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 55  ublic override U
5990: 49 54 79 70 65 45 64 69 74 6f 72 45 64 69 74 53  ITypeEditorEditS
59a0: 74 79 6c 65 20 47 65 74 45 64 69 74 53 74 79 6c  tyle GetEditStyl
59b0: 65 28 49 54 79 70 65 44 65 73 63 72 69 70 74 6f  e(ITypeDescripto
59c0: 72 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74  rContext context
59d0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
59e0: 74 75 72 6e 20 55 49 54 79 70 65 45 64 69 74 6f  turn UITypeEdito
59f0: 72 45 64 69 74 53 74 79 6c 65 2e 44 72 6f 70 44  rEditStyle.DropD
5a00: 6f 77 6e 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  own;.    }..    
5a10: 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69  protected overri
5a20: 64 65 20 76 6f 69 64 20 46 69 6c 6c 54 72 65 65  de void FillTree
5a30: 57 69 74 68 44 61 74 61 28 53 65 6c 65 63 74 6f  WithData(Selecto
5a40: 72 20 73 65 6c 65 63 74 6f 72 2c 20 49 54 79 70  r selector, ITyp
5a50: 65 44 65 73 63 72 69 70 74 6f 72 43 6f 6e 74 65  eDescriptorConte
5a60: 78 74 20 63 6f 6e 74 65 78 74 2c 20 49 53 65 72  xt context, ISer
5a70: 76 69 63 65 50 72 6f 76 69 64 65 72 20 70 72 6f  viceProvider pro
5a80: 76 69 64 65 72 29 0a 20 20 20 20 7b 0a 20 20 20  vider).    {.   
5a90: 20 20 20 62 61 73 65 2e 46 69 6c 6c 54 72 65 65     base.FillTree
5aa0: 57 69 74 68 44 61 74 61 28 73 65 6c 65 63 74 6f  WithData(selecto
5ab0: 72 2c 20 63 6f 6e 74 65 78 74 2c 20 70 72 6f 76  r, context, prov
5ac0: 69 64 65 72 29 3b 0a 20 20 20 20 20 20 49 48 61  ider);.      IHa
5ad0: 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 63 6f 70  veConnectionScop
5ae0: 65 20 73 6f 75 72 63 65 20 3d 20 63 6f 6e 74 65  e source = conte
5af0: 78 74 2e 49 6e 73 74 61 6e 63 65 20 61 73 20 49  xt.Instance as I
5b00: 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 63  HaveConnectionSc
5b10: 6f 70 65 3b 0a 20 20 20 20 20 20 54 61 62 6c 65  ope;.      Table
5b20: 20 64 65 73 69 67 6e 3b 0a 0a 20 20 20 20 20 20   design;..      
5b30: 69 66 20 28 73 6f 75 72 63 65 20 3d 3d 20 6e 75  if (source == nu
5b40: 6c 6c 29 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20  ll) return;..   
5b50: 20 20 20 64 65 73 69 67 6e 20 3d 20 73 6f 75 72     design = sour
5b60: 63 65 2e 44 65 73 69 67 6e 54 61 62 6c 65 20 61  ce.DesignTable a
5b70: 73 20 54 61 62 6c 65 3b 0a 0a 20 20 20 20 20 20  s Table;..      
5b80: 75 73 69 6e 67 20 28 44 61 74 61 54 61 62 6c 65  using (DataTable
5b90: 20 74 61 62 6c 65 20 3d 20 73 6f 75 72 63 65 2e   table = source.
5ba0: 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 2e  GetConnection().
5bb0: 47 65 74 53 63 68 65 6d 61 28 22 54 61 62 6c 65  GetSchema("Table
5bc0: 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d  s", new string[]
5bd0: 20 7b 20 73 6f 75 72 63 65 2e 43 61 74 61 6c 6f   { source.Catalo
5be0: 67 53 63 6f 70 65 20 7d 29 29 0a 20 20 20 20 20  gScope })).     
5bf0: 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61   {.        forea
5c00: 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77 20  ch (DataRow row 
5c10: 69 6e 20 74 61 62 6c 65 2e 52 6f 77 73 29 0a 20  in table.Rows). 
5c20: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
5c30: 20 20 20 62 6f 6f 6c 20 61 64 64 20 3d 20 74 72     bool add = tr
5c40: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ue;.          if
5c50: 20 28 64 65 73 69 67 6e 20 21 3d 20 6e 75 6c 6c   (design != null
5c60: 20 26 26 20 28 72 6f 77 5b 32 5d 2e 54 6f 53 74   && (row[2].ToSt
5c70: 72 69 6e 67 28 29 20 3d 3d 20 64 65 73 69 67 6e  ring() == design
5c80: 2e 4f 6c 64 4e 61 6d 65 20 7c 7c 20 72 6f 77 5b  .OldName || row[
5c90: 32 5d 2e 54 6f 53 74 72 69 6e 67 28 29 20 3d 3d  2].ToString() ==
5ca0: 20 64 65 73 69 67 6e 2e 4e 61 6d 65 29 29 0a 20   design.Name)). 
5cb0: 20 20 20 20 20 20 20 20 20 20 20 61 64 64 20 3d             add =
5cc0: 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20   false;..       
5cd0: 20 20 20 69 66 20 28 61 64 64 29 20 0a 20 20 20     if (add) .   
5ce0: 20 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 6f           selecto
5cf0: 72 2e 41 64 64 4e 6f 64 65 28 72 6f 77 5b 32 5d  r.AddNode(row[2]
5d00: 2e 54 6f 53 74 72 69 6e 67 28 29 2c 20 72 6f 77  .ToString(), row
5d10: 5b 32 5d 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20 20  [2], null);.    
5d20: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
5d30: 20 20 20 20 69 66 20 28 64 65 73 69 67 6e 20 21      if (design !
5d40: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
5d50: 73 65 6c 65 63 74 6f 72 2e 41 64 64 4e 6f 64 65  selector.AddNode
5d60: 28 64 65 73 69 67 6e 2e 4e 61 6d 65 2c 20 64 65  (design.Name, de
5d70: 73 69 67 6e 2e 4e 61 6d 65 2c 20 6e 75 6c 6c 29  sign.Name, null)
5d80: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a        ;.    }.  }.}.