public void Indexer2_Value_Null()
{
DataTable dt = new DataTable();
DataColumn dc0 = new DataColumn("Col0", typeof(Address));
dt.Columns.Add(dc0);
DataColumn dc1 = new DataColumn("Col1", typeof(Person));
dt.Columns.Add(dc1);
Person personA = new Person("Miguel");
Address addressA = new Address("X", 5);
Person personB = new Person("Chris");
Address addressB = new Address("Y", 4);
Person personC = new Person("Jackson");
Address addressC = new Address("Z", 3);
dt.Rows.Add(new object[] { addressA, personA });
dt.Rows.Add(new object[] { addressB, personB });
DataRow dr = dt.Rows[0];
try
{
dr[0] = null;
Assert.False(true);
}
catch (ArgumentException ex)
{
// Cannot set Column 'Col0' to be null.
// Please use DBNull instead
Assert.Equal(typeof(ArgumentException), ex.GetType());
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("'Col0'") != -1);
Assert.True(ex.Message.IndexOf("DBNull") != -1);
}
Assert.Equal(addressA, dr[0]);
Assert.False(dr.IsNull(0));
Assert.Same(personA, dr[1]);
Assert.False(dr.IsNull(1));
dr[1] = null;
Assert.Equal(addressA, dr[0]);
Assert.False(dr.IsNull(0));
Assert.Same(DBNull.Value, dr[1]);
Assert.True(dr.IsNull(1));
dr[0] = DBNull.Value;
Assert.Same(DBNull.Value, dr[0]);
Assert.True(dr.IsNull(0));
Assert.Same(DBNull.Value, dr[1]);
Assert.True(dr.IsNull(1));
dr.BeginEdit();
dr[1] = personC;
Assert.Same(DBNull.Value, dr[0]);
Assert.True(dr.IsNull(0));
Assert.Equal(personC, dr[1]);
Assert.False(dr.IsNull(1));
dr.EndEdit();
Assert.Same(DBNull.Value, dr[0]);
Assert.True(dr.IsNull(0));
Assert.Equal(personC, dr[1]);
Assert.False(dr.IsNull(1));
dr[1] = DBNull.Value;
Assert.Same(DBNull.Value, dr[0]);
Assert.True(dr.IsNull(0));
Assert.Same(DBNull.Value, dr[1]);
Assert.True(dr.IsNull(1));
}