Set 2 Extended Properties After Field Change

I am really stumped as to why this won’t work. It turns the RequestDate read only but not the NeedByDate. Any help is appreciated.

private static void OrderHed_AfterFieldChange(object sender, DataColumnChangeEventArgs args)
	{
		// ** Argument Properties and Uses **
		// args.Row["FieldName"]
		// args.Column, args.ProposedValue, args.Row
		// Add Event Handler Code
		switch (args.Column.ColumnName)
		{
			case "ShipOrderComplete":
				if (Convert.ToBoolean(args.ProposedValue) == true)
				{
					EpiDataView edvOrderDtl = ((EpiDataView)(Script.oTrans.EpiDataViews["OrderDtl"]));

					if (edvOrderDtl.dataView.Table.Columns.Contains("NeedByDate"))
					{
					edvOrderDtl.dataView.Table.Columns["NeedByDate"].ExtendedProperties["ReadOnly"] = true;
					}

					if (edvOrderDtl.dataView.Table.Columns.Contains("RequestDate"))
					{
					edvOrderDtl.dataView.Table.Columns["RequestDate"].ExtendedProperties["ReadOnly"] = true;
					}
				}
				
				if (Convert.ToBoolean(args.ProposedValue) == false)
				{
					EpiDataView edvOrderDtl = ((EpiDataView)(Script.oTrans.EpiDataViews["OrderDtl"]));

					if (edvOrderDtl.dataView.Table.Columns.Contains("NeedByDate"))
					{
					edvOrderDtl.dataView.Table.Columns["NeedByDate"].ExtendedProperties["ReadOnly"] = false;					
					}

					if (edvOrderDtl.dataView.Table.Columns.Contains("RequestDate"))
					{
					edvOrderDtl.dataView.Table.Columns["RequestDate"].ExtendedProperties["ReadOnly"] = false;
					}
				}
	
				break;

It shouldnt matter, but try testing for both Columns.Contains in one if statement and if both exist, then set both ext propr

if (edvOrderDtl.dataView.Table.Columns.Contains("NeedByDate")
  && edvOrderDtl.dataView.Table.Columns.Contains("RequestDate"){
    
edvOrderDtl.dataView.Table.Columns["NeedByDate"].ExtendedProperties["ReadOnly"]=true;
 
   edvOrderDtl.dataView.Table.Columns["RequestDate"].ExtendedProperties["ReadOnly"]=true;
    }

Also, just my style, but I would have:

  1. Declared the edv (edvOrderDtl) just once. Before any tests.
  2. The second test of ProposedValue == false isn’t needed if you make that an else block. Because the if ProposedValue isnt true (the first if) then the 2nd (being false) is true.