組み合わせ可能な列挙体には、Flags 属性を付けるのが一般的です。
Flags 属性の解説のサンプルコードに各メンバの値の定義の仕方もありますが、Flags 属性だけではダメで、それぞれに値を設定しなければなりません。一般的には、2 の n 乗の値をそれぞれ設定します。0 は他の値と組み合わせることはできないため、None 的な項目に割り振ることが多いでしょう。
組み合わせ可能な列挙体 A と B を組み合わせることを指定するには、| ビット演算子を使用します。& 演算子は、「両者の各ビットが両方立っているビットだけ立てる」演算を行うので、2 進数 01 と 10 を & したら 0 が返ってしまいます。お試しのコードで DataList.A が渡されるのは、列挙体は特に指定しなければ 0 から値が割り振られること、および & 演算子の使用によるものですね(0 と任意の数値を & 演算したら必ず 0 になります)。
[追記] 組み合わされた列挙値に特定の値が含まれているかどうかを確認するのに、& 演算子が利用されます。