Ну, я нашел решение, которое включает в себя FormView, но вы не указываете, соответствует ли это вашему сценарию.
Так или иначе, в моем случае объект DataBound-ed - это мое собственное dto (не то, чтобы это имело значение), и хитрость в том, что когда вы обновляете форму, вы должны по существу присоединиться к событию, связанному с данными, и повторно запишите пустую строку как нулевое значение, чтобы инфраструктура могла встраивать значение в построенный объект:
protected void myFormView_Updating(object sender, FormViewUpdateEventArgs e)
{
if (string.Empty.Equals(e.NewValues["MyProperty"]))
e.NewValues["MyProperty"] = null;
}
и аналогично на вставке
protected void myFormView_Inserting(object sender, FormViewInsertEventArgs e)
{
if (string.Empty.Equals(e.Values["MyProperty"]))
e.Values["MyProperty"] = null;
}
что делает это действительно забавным, так это то, что сообщение об ошибке (не является допустимым Int32) на самом деле неверно, и оно должно писать (не является допустимым Nullable), но тогда nullables были бы первым классом граждане не так ли?