You could have two status attributes. One stored and one calculated. The stored one is used to store the status (independent from the date). The calculated one is set to the stored value if date is not less than current date. Otherwise it is set to Expired. In your datagrid, you can only show the calculated one as it always reflects your need.
You could use a calculated field for it but that has some performance drawbacks. How many rows are we talking about?
Otherwise you have to make sure that you recalculate the status on a daily basis (scheduled event running each night that recalculates the status).
How can i setup a schedule event running?