@@ -296,6 +296,36 @@ type DataTablesTests() =
296296 // getting value same way as a plain datatable still yields DBNull
297297 Assert.Equal( DBNull.Value, r.[ t.Columns.d] :?> DBNull)
298298
299+ [<Fact>]
300+ member __. ``Can use datacolumns GetValue and SetValue methods`` () =
301+ let t = ( new GetArbitraryDataAsDataTable()) .Execute()
302+ let r = t.Rows.[ 0 ]
303+ let a , b , c , d =
304+ t.Columns.a.GetValue( r)
305+ , t.Columns.b.GetValue( r)
306+ , t.Columns.c.GetValue( r)
307+ , t.Columns.d.GetValue( r)
308+
309+ Assert.Equal( r.a, a)
310+ Assert.Equal( r.b, b)
311+ Assert.Equal( r.c, c)
312+ Assert.Equal( r.d, d)
313+
314+ // need to make column readonly = false in order to use SetValue from the DataColumn
315+ t.Columns.a.ReadOnly <- false
316+ t.Columns.b.ReadOnly <- false
317+ t.Columns.c.ReadOnly <- false
318+ t.Columns.d.ReadOnly <- false
319+
320+ t.Columns.a.SetValue( r, 108 )
321+ t.Columns.b.SetValue( r, 108 )
322+ t.Columns.c.SetValue( r, 108 )
323+ t.Columns.d.SetValue( r, Some 108 )
324+
325+ Assert.Equal( r.a, 108 )
326+ Assert.Equal( r.b, 108 )
327+ Assert.Equal( r.c, 108 )
328+ Assert.Equal( r.d, Some 108 )
299329
300330 [<Fact>]
301331 member __. ``Can use DataColumnCollection`` () =
@@ -317,12 +347,21 @@ type DataTablesTests() =
317347 let products = new AdventureWorks.Production.Tables.Product()
318348
319349 let product = products.NewRow()
320- product.Name <- " foo"
350+
351+ // can use SetValue
352+ let newName = " foo"
353+ products.Columns.Name.SetValue( product, newName)
354+ Assert.True( product.Name = newName)
321355
322356 // use as plain DataColumns
323357 let name = product.[ products.Columns.Name] :?> string
324358 Assert.True( product.Name = name)
325-
359+
360+ // can use GetValue
361+ product.FinishedGoodsFlag <- true
362+ let finishedGoodsFlag = products.Columns.FinishedGoodsFlag.GetValue( product)
363+ Assert.Equal( product.FinishedGoodsFlag, finishedGoodsFlag)
364+
326365 [<Fact>]
327366 member __. ``Can use Table property on SqlCommandProvider's rows`` () =
328367 use cmd = new GetArbitraryDataAsDataTable()
0 commit comments