2 // Rafael Mizrahi <rafim@mainsoft.com>
3 // Erez Lotan <erezl@mainsoft.com>
4 // Oren Gurfinkel <oreng@mainsoft.com>
7 // Copyright (c) 2004 Mainsoft Co.
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using NUnit.Framework;
31 using System.ComponentModel;
33 using MonoTests.System.Data.Utils;
34 using System.Collections;
35 using System.Runtime.Serialization;
37 using System.Xml.Schema;
39 using System.Globalization;
41 namespace MonoTests.System.Data
44 public class DataSetTypedDataSetTest
46 private string EventStatus = string.Empty ;
49 public void TypedDataSet()
52 //check dataset constructor
53 myTypedDataSet ds = null;
54 DataSet unTypedDs = new DataSet();
55 ds = new myTypedDataSet();
56 Assert.IsFalse(ds == null ,"TDS0" );
57 Assert.AreEqual(typeof(myTypedDataSet), ds.GetType() ,"TDS1" );
60 ds.ReadXml("Test/System.Data/TypedDataSet.xml");
62 // check DataSet named property "Orders"
63 myTypedDataSet.OrdersDataTable tblOrders = null;
64 tblOrders = ds.Orders;
65 Assert.AreEqual(ds.Tables["Orders"],tblOrders ,"TDS2");
67 //check DataSet named property Orders - by index");
68 tblOrders = ds.Orders;
69 Assert.AreEqual(ds.Tables[1],tblOrders ,"TDS3");
71 //add new row AddTableNameRow, check row count");
72 i = tblOrders.Rows.Count;
73 tblOrders.AddOrdersRow("SAVEA",1,new DateTime(1998,05,01,00,00,00,000)
74 ,new DateTime(1998,05,29,00,00,00,000)
75 ,new DateTime(1998,05,04,00,00,00,000),1,30.0900m
76 ,"Save-a-lot Markets","187 Suffolk Ln.","Boise","ID","83720","USA");
77 Assert.AreEqual(i+1 ,tblOrders.Rows.Count,"TDS5");
79 //check the new row AutoIncrement field - AddTableNameRow
80 i = (int)tblOrders.Rows[tblOrders.Rows.Count-2][0];
81 Assert.AreEqual(i+1 ,(int)tblOrders.Rows[tblOrders.Rows.Count-1][0],"TDS6");
83 //Create New Row using NewTableNameRow, check row != null
84 myTypedDataSet.OrdersRow drOrders = null;
85 drOrders = tblOrders.NewOrdersRow();
86 Assert.IsFalse(drOrders == null ,"TDS7");
88 //Create New Row using NewTableNameRow, check row state
89 Assert.AreEqual(DataRowState.Detached, drOrders.RowState , "TDS8");
91 //add new row NewTableNameRow, check row count
92 //drOrders.OrderID = DBNull.Value;
93 drOrders.CustomerID = "GREAL";
94 drOrders.EmployeeID = 4;
95 drOrders.OrderDate = new DateTime(1998,04,30,00,00,00,000);
96 drOrders.RequiredDate = new DateTime(1998,06,11,00,00,00,000);
97 drOrders["ShippedDate"] = DBNull.Value;
99 drOrders.Freight = 14.0100m;
100 drOrders.ShipName = "Great Lakes";
101 drOrders.ShipAddress = "Food Market";
102 drOrders.ShipCity = "Baker Blvd.";
103 drOrders.ShipRegion = "Eugene";
104 drOrders.ShipPostalCode = "OR 97403";
105 drOrders.ShipCountry = "USA";
107 i = tblOrders.Rows.Count;
108 tblOrders.AddOrdersRow(drOrders);
109 Assert.AreEqual(i+1 ,tblOrders.Rows.Count,"TDS9");
111 //check StrongTypingException
114 DateTime d = drOrders.ShippedDate; //drOrders.ShippedDate = null, will raise exception
115 Assert.Fail("TDS10: Failed to throw StrongTypingException");
117 catch (StrongTypingException) {}
118 catch (AssertionException exc) {throw exc;}
119 catch (Exception exc)
121 Assert.Fail("TDS11: Wrong exception type. Got:" + exc);
124 //check the new row AutoIncrement field - NewTableNameRow
125 i = (int)tblOrders.Rows[tblOrders.Rows.Count-2][0];
126 Assert.AreEqual(i+1 ,(int)tblOrders.Rows[tblOrders.Rows.Count-1][0],"TDS12");
128 // convenience IsNull functions
129 // only if it can be null
130 Assert.IsFalse(drOrders.IsShipAddressNull() ,"TDS13");
132 drOrders.SetShipAddressNull();
133 Assert.IsTrue(drOrders.IsShipAddressNull() ,"TDS14");
135 // Table exposes a public property Count == table.Rows.Count
136 Assert.AreEqual(tblOrders.Count ,tblOrders.Rows.Count , "TDS15");
140 myTypedDataSet.OrdersRow dr = tblOrders[0];
141 Assert.AreEqual(tblOrders.FindByOrderID(dr.OrderID),dr,"TDS16" );
143 //Remove row and check row count
145 myTypedDataSet.OrdersRow drr = tblOrders[0];
146 tblOrders.RemoveOrdersRow(drr);
147 Assert.AreEqual(i-1 ,tblOrders.Count,"TDS17");
149 //first column is readonly
150 Assert.IsTrue(tblOrders.OrderIDColumn.ReadOnly ,"TDS18");
152 //read only exception
155 tblOrders[0].OrderID = 99;
156 Assert.Fail("TDS19: Failed to throw ReadOnlyException");
158 catch (ReadOnlyException) {}
159 catch (AssertionException exc) {throw exc;}
160 catch (Exception exc)
162 Assert.Fail("TDS20: Wrong exception type. Got:" + exc);
165 tblOrders.AcceptChanges();
168 // add event handlers
169 ds.Orders.OrdersRowChanging += new myTypedDataSet.OrdersRowChangeEventHandler(T_Changing);
170 ds.Orders.OrdersRowChanged += new myTypedDataSet.OrdersRowChangeEventHandler(T_Changed);
171 ds.Orders.OrdersRowDeleting += new myTypedDataSet.OrdersRowChangeEventHandler(T_Deleting);
172 ds.Orders.OrdersRowDeleted += new myTypedDataSet.OrdersRowChangeEventHandler(T_Deleted);
174 //RowChange event order
175 tblOrders[0].ShipCity = "Tel Aviv";
176 Assert.AreEqual("AB",EventStatus , "TDS21");
178 EventStatus = string.Empty;
179 //RowDelet event order
180 tblOrders[0].Delete();
181 Assert.AreEqual("AB",EventStatus , "TDS22");
183 //expose DataColumn as property
184 Assert.AreEqual(ds.Orders.OrderIDColumn ,ds.Tables["Orders"].Columns["OrderID"],"TDS23");
186 //Accept changes for all deleted and changedd rows.
190 //ChildTableRow has property ParentTableRow
191 myTypedDataSet.OrdersRow dr1 = ds.Order_Details[0].OrdersRow;
192 DataRow dr2 = ds.Order_Details[0].GetParentRow(ds.Relations[0]);
193 Assert.AreEqual(dr1 ,dr2 ,"TDS24");
195 //ParentTableRow has property ChildTableRow
196 myTypedDataSet.Order_DetailsRow[] drArr1 = ds.Orders[0].GetOrder_DetailsRows();
197 DataRow[] drArr2 = ds.Orders[0].GetChildRows(ds.Relations[0]);
198 Assert.AreEqual(drArr1 ,drArr2,"TDS25");
200 //now test serialization of a typed dataset generated by microsoft's xsd.exe
201 DataSet1 ds1 = new DataSet1();
202 ds1.DataTable1.AddDataTable1Row("test");
203 ds1.DataTable1.AddDataTable1Row("test2");
205 global::System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter =
206 new global::System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
207 MemoryStream stream = new MemoryStream();
209 formatter.Serialize(stream, ds1);
211 stream.Seek(0, SeekOrigin.Begin);
213 DataSet1 ds1load = (DataSet1) formatter.Deserialize(stream);
215 Assert.IsTrue(ds1load.Tables.Contains("DataTable1"));
216 Assert.AreEqual("DataTable1DataTable", ds1load.Tables["DataTable1"].GetType().Name);
217 Assert.AreEqual(2, ds1load.DataTable1.Rows.Count);
218 Assert.AreEqual("DataTable1Row", ds1load.DataTable1[0].GetType().Name);
219 if (ds1load.DataTable1[0].Column1 == "test") {
220 Assert.AreEqual("test2", ds1load.DataTable1[1].Column1);
221 } else if (ds1load.DataTable1[0].Column1 == "test2") {
222 Assert.AreEqual("test", ds1load.DataTable1[1].Column1);
224 Assert.Fail("Invalid entry for Column1");
227 //now test when the mode is exclude schema
228 ds1.SchemaSerializationMode = global::System.Data.SchemaSerializationMode.ExcludeSchema;
230 stream = new MemoryStream();
232 formatter.Serialize(stream, ds1);
234 stream.Seek(0, SeekOrigin.Begin);
236 ds1load = (DataSet1) formatter.Deserialize(stream);
238 Assert.IsTrue(ds1load.Tables.Contains("DataTable1"));
239 Assert.AreEqual("DataTable1DataTable", ds1load.Tables["DataTable1"].GetType().Name);
240 Assert.AreEqual(2, ds1load.DataTable1.Rows.Count);
241 Assert.AreEqual("DataTable1Row", ds1load.DataTable1[0].GetType().Name);
242 if (ds1load.DataTable1[0].Column1 == "test") {
243 Assert.AreEqual("test2", ds1load.DataTable1[1].Column1);
244 } else if (ds1load.DataTable1[0].Column1 == "test2") {
245 Assert.AreEqual("test", ds1load.DataTable1[1].Column1);
247 Assert.Fail("Invalid entry for Column1");
251 protected void T_Changing(object sender, myTypedDataSet.OrdersRowChangeEvent e)
256 protected void T_Changed(object sender, myTypedDataSet.OrdersRowChangeEvent e)
261 protected void T_Deleting(object sender, myTypedDataSet.OrdersRowChangeEvent e)
266 protected void T_Deleted(object sender, myTypedDataSet.OrdersRowChangeEvent e)
272 [DesignerCategoryAttribute("code")]
274 public class myTypedDataSet : DataSet
276 private Order_DetailsDataTable tableOrder_Details;
278 private OrdersDataTable tableOrders;
280 private DataRelation relationOrdersOrder_x0020_Details;
282 public myTypedDataSet()
285 CollectionChangeEventHandler schemaChangedHandler = new CollectionChangeEventHandler(this.SchemaChanged);
286 this.Tables.CollectionChanged += schemaChangedHandler;
287 this.Relations.CollectionChanged += schemaChangedHandler;
290 protected myTypedDataSet(SerializationInfo info, StreamingContext context)
292 string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string))));
293 if ((strSchema != null))
295 DataSet ds = new DataSet();
296 ds.ReadXmlSchema(new XmlTextReader(new StringReader(strSchema)));
297 if ((ds.Tables["Order Details"] != null))
299 this.Tables.Add(new Order_DetailsDataTable(ds.Tables["Order Details"]));
301 if ((ds.Tables["Orders"] != null))
303 this.Tables.Add(new OrdersDataTable(ds.Tables["Orders"]));
305 this.DataSetName = ds.DataSetName;
306 this.Prefix = ds.Prefix;
307 this.Namespace = ds.Namespace;
308 this.Locale = ds.Locale;
309 this.CaseSensitive = ds.CaseSensitive;
310 this.EnforceConstraints = ds.EnforceConstraints;
311 this.Merge(ds, false, MissingSchemaAction.Add);
318 this.GetSerializationData(info, context);
319 CollectionChangeEventHandler schemaChangedHandler = new CollectionChangeEventHandler(this.SchemaChanged);
320 this.Tables.CollectionChanged += schemaChangedHandler;
321 this.Relations.CollectionChanged += schemaChangedHandler;
325 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Content)]
326 public Order_DetailsDataTable Order_Details
330 return this.tableOrder_Details;
335 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Content)]
336 public OrdersDataTable Orders
340 return this.tableOrders;
344 public override DataSet Clone()
346 myTypedDataSet cln = ((myTypedDataSet)(base.Clone()));
351 protected override bool ShouldSerializeTables()
356 protected override bool ShouldSerializeRelations()
361 protected override void ReadXmlSerializable(XmlReader reader)
364 DataSet ds = new DataSet();
366 if ((ds.Tables["Order Details"] != null))
368 this.Tables.Add(new Order_DetailsDataTable(ds.Tables["Order Details"]));
370 if ((ds.Tables["Orders"] != null))
372 this.Tables.Add(new OrdersDataTable(ds.Tables["Orders"]));
374 this.DataSetName = ds.DataSetName;
375 this.Prefix = ds.Prefix;
376 this.Namespace = ds.Namespace;
377 this.Locale = ds.Locale;
378 this.CaseSensitive = ds.CaseSensitive;
379 this.EnforceConstraints = ds.EnforceConstraints;
380 this.Merge(ds, false, MissingSchemaAction.Add);
384 protected override XmlSchema GetSchemaSerializable()
386 MemoryStream stream = new MemoryStream();
387 this.WriteXmlSchema(new XmlTextWriter(stream, null));
389 return XmlSchema.Read(new XmlTextReader(stream), null);
392 internal void InitVars()
394 this.tableOrder_Details = ((Order_DetailsDataTable)(this.Tables["Order Details"]));
395 if ((this.tableOrder_Details != null))
397 this.tableOrder_Details.InitVars();
399 this.tableOrders = ((OrdersDataTable)(this.Tables["Orders"]));
400 if ((this.tableOrders != null))
402 this.tableOrders.InitVars();
404 this.relationOrdersOrder_x0020_Details = this.Relations["OrdersOrder_x0020_Details"];
407 private void InitClass()
409 this.DataSetName = "myTypedDataSet";
411 this.Namespace = "http://www.tempuri.org/myTypedDataSet.xsd";
412 this.Locale = new CultureInfo("en-US");
413 this.CaseSensitive = false;
414 this.EnforceConstraints = true;
415 this.tableOrder_Details = new Order_DetailsDataTable();
416 this.Tables.Add(this.tableOrder_Details);
417 this.tableOrders = new OrdersDataTable();
418 this.Tables.Add(this.tableOrders);
419 ForeignKeyConstraint fkc;
420 fkc = new ForeignKeyConstraint("OrdersOrder_x0020_Details", new DataColumn[] {
421 this.tableOrders.OrderIDColumn}, new DataColumn[] {
422 this.tableOrder_Details.OrderIDColumn});
423 this.tableOrder_Details.Constraints.Add(fkc);
424 fkc.AcceptRejectRule = AcceptRejectRule.None;
425 fkc.DeleteRule = Rule.Cascade;
426 fkc.UpdateRule = Rule.Cascade;
427 this.relationOrdersOrder_x0020_Details = new DataRelation("OrdersOrder_x0020_Details", new DataColumn[] {
428 this.tableOrders.OrderIDColumn}, new DataColumn[] {
429 this.tableOrder_Details.OrderIDColumn}, false);
430 this.Relations.Add(this.relationOrdersOrder_x0020_Details);
433 private bool ShouldSerializeOrder_Details()
438 private bool ShouldSerializeOrders()
443 private void SchemaChanged(object sender, CollectionChangeEventArgs e)
445 if ((e.Action == CollectionChangeAction.Remove))
451 public delegate void Order_DetailsRowChangeEventHandler(object sender, Order_DetailsRowChangeEvent e);
453 public delegate void OrdersRowChangeEventHandler(object sender, OrdersRowChangeEvent e);
455 public class Order_DetailsDataTable : DataTable, IEnumerable
458 private DataColumn columnOrderID;
460 private DataColumn columnProductID;
462 private DataColumn columnUnitPrice;
464 private DataColumn columnQuantity;
466 private DataColumn columnDiscount;
468 internal Order_DetailsDataTable() :
469 base("Order Details")
474 internal Order_DetailsDataTable(DataTable table) :
475 base(table.TableName)
477 if ((table.CaseSensitive != table.DataSet.CaseSensitive))
479 this.CaseSensitive = table.CaseSensitive;
481 if ((table.Locale.ToString() != table.DataSet.Locale.ToString()))
483 this.Locale = table.Locale;
485 if ((table.Namespace != table.DataSet.Namespace))
487 this.Namespace = table.Namespace;
489 this.Prefix = table.Prefix;
490 this.MinimumCapacity = table.MinimumCapacity;
491 this.DisplayExpression = table.DisplayExpression;
499 return this.Rows.Count;
503 internal DataColumn OrderIDColumn
507 return this.columnOrderID;
511 internal DataColumn ProductIDColumn
515 return this.columnProductID;
519 internal DataColumn UnitPriceColumn
523 return this.columnUnitPrice;
527 internal DataColumn QuantityColumn
531 return this.columnQuantity;
535 internal DataColumn DiscountColumn
539 return this.columnDiscount;
543 public Order_DetailsRow this[int index]
547 return ((Order_DetailsRow)(this.Rows[index]));
551 public event Order_DetailsRowChangeEventHandler Order_DetailsRowChanged;
553 public event Order_DetailsRowChangeEventHandler Order_DetailsRowChanging;
555 public event Order_DetailsRowChangeEventHandler Order_DetailsRowDeleted;
557 public event Order_DetailsRowChangeEventHandler Order_DetailsRowDeleting;
559 public void AddOrder_DetailsRow(Order_DetailsRow row)
564 public Order_DetailsRow AddOrder_DetailsRow(OrdersRow parentOrdersRowByOrdersOrder_x0020_Details, int ProductID, Decimal UnitPrice, short Quantity, string Discount)
566 Order_DetailsRow rowOrder_DetailsRow = ((Order_DetailsRow)(this.NewRow()));
567 rowOrder_DetailsRow.ItemArray = new object[] {
568 parentOrdersRowByOrdersOrder_x0020_Details[0],
573 this.Rows.Add(rowOrder_DetailsRow);
574 return rowOrder_DetailsRow;
577 public Order_DetailsRow FindByOrderIDProductID(int OrderID, int ProductID)
579 return ((Order_DetailsRow)(this.Rows.Find(new object[] {
584 public IEnumerator GetEnumerator()
586 return this.Rows.GetEnumerator();
589 public override DataTable Clone()
591 Order_DetailsDataTable cln = ((Order_DetailsDataTable)(base.Clone()));
596 protected override DataTable CreateInstance()
598 return new Order_DetailsDataTable();
601 internal void InitVars()
603 this.columnOrderID = this.Columns["OrderID"];
604 this.columnProductID = this.Columns["ProductID"];
605 this.columnUnitPrice = this.Columns["UnitPrice"];
606 this.columnQuantity = this.Columns["Quantity"];
607 this.columnDiscount = this.Columns["Discount"];
610 private void InitClass()
612 this.columnOrderID = new DataColumn("OrderID", typeof(int), null, MappingType.Element);
613 this.Columns.Add(this.columnOrderID);
614 this.columnProductID = new DataColumn("ProductID", typeof(int), null, MappingType.Element);
615 this.Columns.Add(this.columnProductID);
616 this.columnUnitPrice = new DataColumn("UnitPrice", typeof(Decimal), null, MappingType.Element);
617 this.Columns.Add(this.columnUnitPrice);
618 this.columnQuantity = new DataColumn("Quantity", typeof(short), null, MappingType.Element);
619 this.Columns.Add(this.columnQuantity);
620 this.columnDiscount = new DataColumn("Discount", typeof(string), null, MappingType.Element);
621 this.Columns.Add(this.columnDiscount);
622 this.Constraints.Add(new UniqueConstraint("Constraint1", new DataColumn[] {
624 this.columnProductID}, true));
625 this.columnOrderID.AllowDBNull = false;
626 this.columnProductID.AllowDBNull = false;
627 this.columnUnitPrice.AllowDBNull = false;
628 this.columnQuantity.AllowDBNull = false;
629 this.columnDiscount.ReadOnly = true;
632 public Order_DetailsRow NewOrder_DetailsRow()
634 return ((Order_DetailsRow)(this.NewRow()));
637 protected override DataRow NewRowFromBuilder(DataRowBuilder builder)
639 return new Order_DetailsRow(builder);
642 protected override Type GetRowType()
644 return typeof(Order_DetailsRow);
647 protected override void OnRowChanged(DataRowChangeEventArgs e)
649 base.OnRowChanged(e);
650 if ((this.Order_DetailsRowChanged != null))
652 this.Order_DetailsRowChanged(this, new Order_DetailsRowChangeEvent(((Order_DetailsRow)(e.Row)), e.Action));
656 protected override void OnRowChanging(DataRowChangeEventArgs e)
658 base.OnRowChanging(e);
659 if ((this.Order_DetailsRowChanging != null))
661 this.Order_DetailsRowChanging(this, new Order_DetailsRowChangeEvent(((Order_DetailsRow)(e.Row)), e.Action));
665 protected override void OnRowDeleted(DataRowChangeEventArgs e)
667 base.OnRowDeleted(e);
668 if ((this.Order_DetailsRowDeleted != null))
670 this.Order_DetailsRowDeleted(this, new Order_DetailsRowChangeEvent(((Order_DetailsRow)(e.Row)), e.Action));
674 protected override void OnRowDeleting(DataRowChangeEventArgs e)
676 base.OnRowDeleting(e);
677 if ((this.Order_DetailsRowDeleting != null))
679 this.Order_DetailsRowDeleting(this, new Order_DetailsRowChangeEvent(((Order_DetailsRow)(e.Row)), e.Action));
683 public void RemoveOrder_DetailsRow(Order_DetailsRow row)
685 this.Rows.Remove(row);
689 public class Order_DetailsRow : DataRow
692 private Order_DetailsDataTable tableOrder_Details;
694 internal Order_DetailsRow(DataRowBuilder rb) :
697 this.tableOrder_Details = ((Order_DetailsDataTable)(this.Table));
704 return ((int)(this[this.tableOrder_Details.OrderIDColumn]));
708 this[this.tableOrder_Details.OrderIDColumn] = value;
716 return ((int)(this[this.tableOrder_Details.ProductIDColumn]));
720 this[this.tableOrder_Details.ProductIDColumn] = value;
724 public Decimal UnitPrice
728 return ((Decimal)(this[this.tableOrder_Details.UnitPriceColumn]));
732 this[this.tableOrder_Details.UnitPriceColumn] = value;
736 public short Quantity
740 return ((short)(this[this.tableOrder_Details.QuantityColumn]));
744 this[this.tableOrder_Details.QuantityColumn] = value;
748 public string Discount
754 return ((string)(this[this.tableOrder_Details.DiscountColumn]));
756 catch (InvalidCastException e)
758 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
763 this[this.tableOrder_Details.DiscountColumn] = value;
767 public OrdersRow OrdersRow
771 return ((OrdersRow)(this.GetParentRow(this.Table.ParentRelations["OrdersOrder_x0020_Details"])));
775 this.SetParentRow(value, this.Table.ParentRelations["OrdersOrder_x0020_Details"]);
779 public bool IsDiscountNull()
781 return this.IsNull(this.tableOrder_Details.DiscountColumn);
784 public void SetDiscountNull()
786 this[this.tableOrder_Details.DiscountColumn] = Convert.DBNull;
790 public class Order_DetailsRowChangeEvent : EventArgs
793 private Order_DetailsRow eventRow;
795 private DataRowAction eventAction;
797 public Order_DetailsRowChangeEvent(Order_DetailsRow row, DataRowAction action)
800 this.eventAction = action;
803 public Order_DetailsRow Row
807 return this.eventRow;
811 public DataRowAction Action
815 return this.eventAction;
820 public class OrdersDataTable : DataTable, IEnumerable
823 private DataColumn columnOrderID;
825 private DataColumn columnCustomerID;
827 private DataColumn columnEmployeeID;
829 private DataColumn columnOrderDate;
831 private DataColumn columnRequiredDate;
833 private DataColumn columnShippedDate;
835 private DataColumn columnShipVia;
837 private DataColumn columnFreight;
839 private DataColumn columnShipName;
841 private DataColumn columnShipAddress;
843 private DataColumn columnShipCity;
845 private DataColumn columnShipRegion;
847 private DataColumn columnShipPostalCode;
849 private DataColumn columnShipCountry;
851 internal OrdersDataTable() :
857 internal OrdersDataTable(DataTable table) :
858 base(table.TableName)
860 if ((table.CaseSensitive != table.DataSet.CaseSensitive))
862 this.CaseSensitive = table.CaseSensitive;
864 if ((table.Locale.ToString() != table.DataSet.Locale.ToString()))
866 this.Locale = table.Locale;
868 if ((table.Namespace != table.DataSet.Namespace))
870 this.Namespace = table.Namespace;
872 this.Prefix = table.Prefix;
873 this.MinimumCapacity = table.MinimumCapacity;
874 this.DisplayExpression = table.DisplayExpression;
882 return this.Rows.Count;
886 internal DataColumn OrderIDColumn
890 return this.columnOrderID;
894 internal DataColumn CustomerIDColumn
898 return this.columnCustomerID;
902 internal DataColumn EmployeeIDColumn
906 return this.columnEmployeeID;
910 internal DataColumn OrderDateColumn
914 return this.columnOrderDate;
918 internal DataColumn RequiredDateColumn
922 return this.columnRequiredDate;
926 internal DataColumn ShippedDateColumn
930 return this.columnShippedDate;
934 internal DataColumn ShipViaColumn
938 return this.columnShipVia;
942 internal DataColumn FreightColumn
946 return this.columnFreight;
950 internal DataColumn ShipNameColumn
954 return this.columnShipName;
958 internal DataColumn ShipAddressColumn
962 return this.columnShipAddress;
966 internal DataColumn ShipCityColumn
970 return this.columnShipCity;
974 internal DataColumn ShipRegionColumn
978 return this.columnShipRegion;
982 internal DataColumn ShipPostalCodeColumn
986 return this.columnShipPostalCode;
990 internal DataColumn ShipCountryColumn
994 return this.columnShipCountry;
998 public OrdersRow this[int index]
1002 return ((OrdersRow)(this.Rows[index]));
1006 public event OrdersRowChangeEventHandler OrdersRowChanged;
1008 public event OrdersRowChangeEventHandler OrdersRowChanging;
1010 public event OrdersRowChangeEventHandler OrdersRowDeleted;
1012 public event OrdersRowChangeEventHandler OrdersRowDeleting;
1014 public void AddOrdersRow(OrdersRow row)
1019 public OrdersRow AddOrdersRow(string CustomerID, int EmployeeID, DateTime OrderDate, DateTime RequiredDate, DateTime ShippedDate, int ShipVia, Decimal Freight, string ShipName, string ShipAddress, string ShipCity, string ShipRegion, string ShipPostalCode, string ShipCountry)
1021 OrdersRow rowOrdersRow = ((OrdersRow)(this.NewRow()));
1022 rowOrdersRow.ItemArray = new object[] {
1037 this.Rows.Add(rowOrdersRow);
1038 return rowOrdersRow;
1041 public OrdersRow FindByOrderID(int OrderID)
1043 return ((OrdersRow)(this.Rows.Find(new object[] {
1047 public IEnumerator GetEnumerator()
1049 return this.Rows.GetEnumerator();
1052 public override DataTable Clone()
1054 OrdersDataTable cln = ((OrdersDataTable)(base.Clone()));
1059 protected override DataTable CreateInstance()
1061 return new OrdersDataTable();
1064 internal void InitVars()
1066 this.columnOrderID = this.Columns["OrderID"];
1067 this.columnCustomerID = this.Columns["CustomerID"];
1068 this.columnEmployeeID = this.Columns["EmployeeID"];
1069 this.columnOrderDate = this.Columns["OrderDate"];
1070 this.columnRequiredDate = this.Columns["RequiredDate"];
1071 this.columnShippedDate = this.Columns["ShippedDate"];
1072 this.columnShipVia = this.Columns["ShipVia"];
1073 this.columnFreight = this.Columns["Freight"];
1074 this.columnShipName = this.Columns["ShipName"];
1075 this.columnShipAddress = this.Columns["ShipAddress"];
1076 this.columnShipCity = this.Columns["ShipCity"];
1077 this.columnShipRegion = this.Columns["ShipRegion"];
1078 this.columnShipPostalCode = this.Columns["ShipPostalCode"];
1079 this.columnShipCountry = this.Columns["ShipCountry"];
1082 private void InitClass()
1084 this.columnOrderID = new DataColumn("OrderID", typeof(int), null, MappingType.Element);
1085 this.Columns.Add(this.columnOrderID);
1086 this.columnCustomerID = new DataColumn("CustomerID", typeof(string), null, MappingType.Element);
1087 this.Columns.Add(this.columnCustomerID);
1088 this.columnEmployeeID = new DataColumn("EmployeeID", typeof(int), null, MappingType.Element);
1089 this.Columns.Add(this.columnEmployeeID);
1090 this.columnOrderDate = new DataColumn("OrderDate", typeof(DateTime), null, MappingType.Element);
1091 this.Columns.Add(this.columnOrderDate);
1092 this.columnRequiredDate = new DataColumn("RequiredDate", typeof(DateTime), null, MappingType.Element);
1093 this.Columns.Add(this.columnRequiredDate);
1094 this.columnShippedDate = new DataColumn("ShippedDate", typeof(DateTime), null, MappingType.Element);
1095 this.Columns.Add(this.columnShippedDate);
1096 this.columnShipVia = new DataColumn("ShipVia", typeof(int), null, MappingType.Element);
1097 this.Columns.Add(this.columnShipVia);
1098 this.columnFreight = new DataColumn("Freight", typeof(Decimal), null, MappingType.Element);
1099 this.Columns.Add(this.columnFreight);
1100 this.columnShipName = new DataColumn("ShipName", typeof(string), null, MappingType.Element);
1101 this.Columns.Add(this.columnShipName);
1102 this.columnShipAddress = new DataColumn("ShipAddress", typeof(string), null, MappingType.Element);
1103 this.Columns.Add(this.columnShipAddress);
1104 this.columnShipCity = new DataColumn("ShipCity", typeof(string), null, MappingType.Element);
1105 this.Columns.Add(this.columnShipCity);
1106 this.columnShipRegion = new DataColumn("ShipRegion", typeof(string), null, MappingType.Element);
1107 this.Columns.Add(this.columnShipRegion);
1108 this.columnShipPostalCode = new DataColumn("ShipPostalCode", typeof(string), null, MappingType.Element);
1109 this.Columns.Add(this.columnShipPostalCode);
1110 this.columnShipCountry = new DataColumn("ShipCountry", typeof(string), null, MappingType.Element);
1111 this.Columns.Add(this.columnShipCountry);
1112 this.Constraints.Add(new UniqueConstraint("Constraint1", new DataColumn[] {
1113 this.columnOrderID}, true));
1114 this.columnOrderID.AutoIncrement = true;
1115 this.columnOrderID.AllowDBNull = false;
1116 this.columnOrderID.ReadOnly = true;
1117 this.columnOrderID.Unique = true;
1120 public OrdersRow NewOrdersRow()
1122 return ((OrdersRow)(this.NewRow()));
1125 protected override DataRow NewRowFromBuilder(DataRowBuilder builder)
1127 return new OrdersRow(builder);
1130 protected override Type GetRowType()
1132 return typeof(OrdersRow);
1135 protected override void OnRowChanged(DataRowChangeEventArgs e)
1137 base.OnRowChanged(e);
1138 if ((this.OrdersRowChanged != null))
1140 this.OrdersRowChanged(this, new OrdersRowChangeEvent(((OrdersRow)(e.Row)), e.Action));
1144 protected override void OnRowChanging(DataRowChangeEventArgs e)
1146 base.OnRowChanging(e);
1147 if ((this.OrdersRowChanging != null))
1149 this.OrdersRowChanging(this, new OrdersRowChangeEvent(((OrdersRow)(e.Row)), e.Action));
1153 protected override void OnRowDeleted(DataRowChangeEventArgs e)
1155 base.OnRowDeleted(e);
1156 if ((this.OrdersRowDeleted != null))
1158 this.OrdersRowDeleted(this, new OrdersRowChangeEvent(((OrdersRow)(e.Row)), e.Action));
1162 protected override void OnRowDeleting(DataRowChangeEventArgs e)
1164 base.OnRowDeleting(e);
1165 if ((this.OrdersRowDeleting != null))
1167 this.OrdersRowDeleting(this, new OrdersRowChangeEvent(((OrdersRow)(e.Row)), e.Action));
1171 public void RemoveOrdersRow(OrdersRow row)
1173 this.Rows.Remove(row);
1177 public class OrdersRow : DataRow
1180 private OrdersDataTable tableOrders;
1182 internal OrdersRow(DataRowBuilder rb) :
1185 this.tableOrders = ((OrdersDataTable)(this.Table));
1192 return ((int)(this[this.tableOrders.OrderIDColumn]));
1196 this[this.tableOrders.OrderIDColumn] = value;
1200 public string CustomerID
1206 return ((string)(this[this.tableOrders.CustomerIDColumn]));
1208 catch (InvalidCastException e)
1210 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1215 this[this.tableOrders.CustomerIDColumn] = value;
1219 public int EmployeeID
1225 return ((int)(this[this.tableOrders.EmployeeIDColumn]));
1227 catch (InvalidCastException e)
1229 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1234 this[this.tableOrders.EmployeeIDColumn] = value;
1238 public DateTime OrderDate
1244 return ((DateTime)(this[this.tableOrders.OrderDateColumn]));
1246 catch (InvalidCastException e)
1248 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1253 this[this.tableOrders.OrderDateColumn] = value;
1257 public DateTime RequiredDate
1263 return ((DateTime)(this[this.tableOrders.RequiredDateColumn]));
1265 catch (InvalidCastException e)
1267 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1272 this[this.tableOrders.RequiredDateColumn] = value;
1276 public DateTime ShippedDate
1282 return ((DateTime)(this[this.tableOrders.ShippedDateColumn]));
1284 catch (InvalidCastException e)
1286 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1291 this[this.tableOrders.ShippedDateColumn] = value;
1301 return ((int)(this[this.tableOrders.ShipViaColumn]));
1303 catch (InvalidCastException e)
1305 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1310 this[this.tableOrders.ShipViaColumn] = value;
1314 public Decimal Freight
1320 return ((Decimal)(this[this.tableOrders.FreightColumn]));
1322 catch (InvalidCastException e)
1324 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1329 this[this.tableOrders.FreightColumn] = value;
1333 public string ShipName
1339 return ((string)(this[this.tableOrders.ShipNameColumn]));
1341 catch (InvalidCastException e)
1343 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1348 this[this.tableOrders.ShipNameColumn] = value;
1352 public string ShipAddress
1358 return ((string)(this[this.tableOrders.ShipAddressColumn]));
1360 catch (InvalidCastException e)
1362 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1367 this[this.tableOrders.ShipAddressColumn] = value;
1371 public string ShipCity
1377 return ((string)(this[this.tableOrders.ShipCityColumn]));
1379 catch (InvalidCastException e)
1381 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1386 this[this.tableOrders.ShipCityColumn] = value;
1390 public string ShipRegion
1396 return ((string)(this[this.tableOrders.ShipRegionColumn]));
1398 catch (InvalidCastException e)
1400 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1405 this[this.tableOrders.ShipRegionColumn] = value;
1409 public string ShipPostalCode
1415 return ((string)(this[this.tableOrders.ShipPostalCodeColumn]));
1417 catch (InvalidCastException e)
1419 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1424 this[this.tableOrders.ShipPostalCodeColumn] = value;
1428 public string ShipCountry
1434 return ((string)(this[this.tableOrders.ShipCountryColumn]));
1436 catch (InvalidCastException e)
1438 throw new StrongTypingException("Cannot get value because it is DBNull.", e);
1443 this[this.tableOrders.ShipCountryColumn] = value;
1447 public bool IsCustomerIDNull()
1449 return this.IsNull(this.tableOrders.CustomerIDColumn);
1452 public void SetCustomerIDNull()
1454 this[this.tableOrders.CustomerIDColumn] = Convert.DBNull;
1457 public bool IsEmployeeIDNull()
1459 return this.IsNull(this.tableOrders.EmployeeIDColumn);
1462 public void SetEmployeeIDNull()
1464 this[this.tableOrders.EmployeeIDColumn] = Convert.DBNull;
1467 public bool IsOrderDateNull()
1469 return this.IsNull(this.tableOrders.OrderDateColumn);
1472 public void SetOrderDateNull()
1474 this[this.tableOrders.OrderDateColumn] = Convert.DBNull;
1477 public bool IsRequiredDateNull()
1479 return this.IsNull(this.tableOrders.RequiredDateColumn);
1482 public void SetRequiredDateNull()
1484 this[this.tableOrders.RequiredDateColumn] = Convert.DBNull;
1487 public bool IsShippedDateNull()
1489 return this.IsNull(this.tableOrders.ShippedDateColumn);
1492 public void SetShippedDateNull()
1494 this[this.tableOrders.ShippedDateColumn] = Convert.DBNull;
1497 public bool IsShipViaNull()
1499 return this.IsNull(this.tableOrders.ShipViaColumn);
1502 public void SetShipViaNull()
1504 this[this.tableOrders.ShipViaColumn] = Convert.DBNull;
1507 public bool IsFreightNull()
1509 return this.IsNull(this.tableOrders.FreightColumn);
1512 public void SetFreightNull()
1514 this[this.tableOrders.FreightColumn] = Convert.DBNull;
1517 public bool IsShipNameNull()
1519 return this.IsNull(this.tableOrders.ShipNameColumn);
1522 public void SetShipNameNull()
1524 this[this.tableOrders.ShipNameColumn] = Convert.DBNull;
1527 public bool IsShipAddressNull()
1529 return this.IsNull(this.tableOrders.ShipAddressColumn);
1532 public void SetShipAddressNull()
1534 this[this.tableOrders.ShipAddressColumn] = Convert.DBNull;
1537 public bool IsShipCityNull()
1539 return this.IsNull(this.tableOrders.ShipCityColumn);
1542 public void SetShipCityNull()
1544 this[this.tableOrders.ShipCityColumn] = Convert.DBNull;
1547 public bool IsShipRegionNull()
1549 return this.IsNull(this.tableOrders.ShipRegionColumn);
1552 public void SetShipRegionNull()
1554 this[this.tableOrders.ShipRegionColumn] = Convert.DBNull;
1557 public bool IsShipPostalCodeNull()
1559 return this.IsNull(this.tableOrders.ShipPostalCodeColumn);
1562 public void SetShipPostalCodeNull()
1564 this[this.tableOrders.ShipPostalCodeColumn] = Convert.DBNull;
1567 public bool IsShipCountryNull()
1569 return this.IsNull(this.tableOrders.ShipCountryColumn);
1572 public void SetShipCountryNull()
1574 this[this.tableOrders.ShipCountryColumn] = Convert.DBNull;
1577 public Order_DetailsRow[] GetOrder_DetailsRows()
1579 return ((Order_DetailsRow[])(this.GetChildRows(this.Table.ChildRelations["OrdersOrder_x0020_Details"])));
1583 public class OrdersRowChangeEvent : EventArgs
1586 private OrdersRow eventRow;
1588 private DataRowAction eventAction;
1590 public OrdersRowChangeEvent(OrdersRow row, DataRowAction action)
1592 this.eventRow = row;
1593 this.eventAction = action;
1596 public OrdersRow Row
1600 return this.eventRow;
1604 public DataRowAction Action
1608 return this.eventAction;