FormView ConvertEmptyStringToNull和绑定

时间:2009-04-15 20:00:54

标签: asp.net data-binding .net-3.5 objectdatasource formview

我正在使用带有ObjectDataSource的FormView并使用<%#Bind(“WhateverProp”)%>进行绑定 - 并且我的所有可空列都返回其中包含类型的默认值。

看起来FormView对象没有像其他绑定容器那样的ConvertEmtpyStringToNull属性。我发现文章暗示这是VS 2005 / .Net 2.0中的一个错误 - 但是没有看到任何说法是什么决议。

有没有人有任何关于如何解决这个问题的建议,而不仅仅是重新捕获ODS_Inserting事件中的所有字段?我宁愿不必编写代码来重新绑定表单上的所有绑定字段,只是为了测试空值。

4 个答案:

答案 0 :(得分:6)

也挣扎着。 对于下拉列表,我这样做:

AppendDataBoundItems="true"


<asp:ListItem Text="" Value=""></asp:ListItem>

对于我的ObjectDataSource,即使我的UpdateMethod接受一个参数,实体,我为实体的每个Nullable Field添加Update params并转换为NULL

<UpdateParameters>
    <asp:Parameter Name="No_Empl_Ferme" Type="Int32" ConvertEmptyStringToNull="true" />
</UpdateParameters>

我对插入也这样做。

工作正常。

答案 1 :(得分:2)

我最终做了这个 - 一种猎枪方法,但在这种情况下我的空字符串值的所有应为空。我还考虑在代码中使用字符串数组来指定哪些值应该为空 - 然后可以循环通过字符串数组而不是所有值。

protected void RequestItemFormView_ItemInserting(object sender, FormViewInsertEventArgs e)
{
    for (int i = 0; i < e.Values.Count - 1; i++)
    {
        if (e.Values[i].ToString() == string.Empty)
        {
            e.Values[i] = null;
        }
    }
}

答案 2 :(得分:1)

在Object DataSource中,您需要为每个可空类型添加InsertParameters,并使用Attribute ConvertEmtpyStringToNull =“True”:

<InsertParameters>
   <asp:Parameter Name="NullableFieldName" Type="Int32" ConvertEmptyStringToNull="true"  />            
</InsertParameters>

答案 3 :(得分:1)

引用: Tonio - 我没有使用单独的参数,而是使用DataObjectTypeName。我的insert方法只需要一个参数,这就是我想要保存回数据库的业务对象。 - Scott Ivey 5月1日12:57

我已经修好了这个:

 protected void FormViewSettings_ItemUpdating(object sender, FormViewUpdateEventArgs e)
  {
     OrderedDictionary values = e.NewValues as OrderedDictionary;

     var personID = values["PersonID"];

     if (string.IsNullOrEmpty(personID.ToString()))
     {
        values.Remove("PersonID");
        values.Add("PersonID", null);
     }
  }

这是一个小小的黑客,但它工作正常。 这样,您可以在不使用ConvertEmptyStringToNull设置的情况下将object属性设置为null而不是string.empty。