我使用的是一个ObjectDataSource一个FormView和使用绑定<%#绑定(“WhateverProp”)%> - 和我所有的空列都在他们的类型的默认值回来了。

似乎FormView的对象不具有ConvertEmtpyStringToNull属性像其他结合容器做。我发现文章暗示说,这是在VS 2005中的错误/ .NET 2.0 - 但看不到任何说什么分辨率为

有没有人有任何建议,我怎么能解决这个不只是重新捕获所有字段中ODS_Inserting事件?我宁愿没有编写代码来重新绑定我的所有窗体上的绑定字段的只是为了测试空值。

有帮助吗?

解决方案

与它挣扎太。 对于下拉列表,我做到这一点:

AppendDataBoundItems="true"


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

有关我的ObjectDataSource,即使我的thoug UpdateMethod采用单个参数,该实体,我添加更新PARAMS为实体的每个可为空场的转换为NULL

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

我做同样的插入。

工作正常。

其他提示

我落得这样 - 种鸟枪法的,但在这种情况下的所有的我空字符串值应该是空。我已经使用在代码的字符串数组,以指定哪个值被清零也被认为是 - 然后可以只是循环通字符串数组,而不是通过所有值

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;
        }
    }
}

在你的DataSource对象,你需要与属性ConvertEmtpyStringToNull添加InsertParameters为每个空类型=“真”:

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

引用: 托尼奥 - 我不使用单独的参数,可以但DataObjectTypeName代替。我的插入方法接受一个PARAM,这就是我想保存到数据库中的业务对象。 - 斯科特艾维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);
     }
  }

这是一个小技巧,但它工作正常。 这种方式可以设置对象属性,而不是为null的String.Empty而不使用ConvertEmptyStringToNull设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top