Why? Because you told it to.
You create a single instance of the Flex class then add it multiple times to yoru collection, overwriting the previous data each time roudn the loop.
If I simplify what you have done it may be clearer:
int x;
for (i = 0; i < 5; i++)
{
x = i;
}
Console.WriteLine(x);
Would you expect the print to contain "0, 1, 2, 3, 4" or just "4"?
You've done the same thing - move the constructor inside the loop, and it'll add different values:
while ( dr1.Read())
{
var model = new Flex();
model.EmailAddress = Convert.ToString(dr1["E_MAIL"]);
model.FirstName = Convert.ToString(dr1["FIRST_NAME"]);
model.LastName = Convert.ToString(dr1["LAST_NAME"]);
model.MobileNo = Convert.ToString(dr1["MOBILE_NUMBER"]);
model.CustNo = Convert.ToString(dr1["CUSTOMER_NO"]);
details.Add(model);
}