FormView ConvertEmptyStringToNull 和绑定

发布于 2024-07-17 07:29:02 字数 334 浏览 10 评论 0原文

我使用带有 ObjectDataSource 的 FormView 并使用 <%# Bind("WhateverProp") %> 进行绑定 - 我的所有可为空的列都将返回其中类型的默认值。

看来 FormView 对象没有像其他绑定容器那样具有 ConvertEmtpyStringToNull 属性。 我发现一些文章表明这​​是 VS 2005 / .Net 2.0 中的一个错误 - 但没有看到任何说明解决方案是什么。

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

I'm using a FormView with an ObjectDataSource and binding using <%# Bind("WhateverProp") %> - and all of my nullable columns are coming back with default values of the type in them.

It appears that the FormView object doesn't have a ConvertEmtpyStringToNull property like the other binding containers do. I've found articles suggesting that this was a bug in VS 2005 / .Net 2.0 - but don't see any saying what the resolution was.

Does anyone have any suggestions as to how I can work around this without just re-capturing all of the fields in the ODS_Inserting event? I'd rather not have to write code to re-bind all of my bound fields on the form just to test for nulls.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

假扮的天使 2024-07-24 07:29:02

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

AppendDataBoundItems="true"


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

对于我的 ObjectDataSource,即使我的 UpdateMethod 采用单个参数(实体),我也会为实体的每个可空字段添加更新参数并转换为 NULL,

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

我对插入也执行相同的操作。

工作正常。

Struggled with it too.
For a dropdownlist, I do that:

AppendDataBoundItems="true"


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

For my ObjectDataSource, even thoug my UpdateMethod takes a single parameter, the entity, I add Update params for each Nullable Field of the Entity with convert to NULL

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

I do the same for the Insert.

Works fine.

物价感观 2024-07-24 07:29:02

我最终采用了这种霰弹枪方法,但在这种情况下,所有空字符串值都应该为空。 我还考虑过在代码中使用字符串数组来指定哪些值应该为空,然后可以只循环遍历字符串数组而不是遍历所有值。

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

I ended up doing this - kind of a shotgun approach, but in this case all of my empty string values should be nulls. I've also considered using a string array in the code to specify which values should be nulled - and then could just loop thru the string array instead of over all of the values.

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;
        }
    }
}
心房敞 2024-07-24 07:29:02

在对象数据源中,您需要使用属性 ConvertEmtpyStringToNull="True" 为每个可空类型添加 InsertParameters :

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

In your Object DataSource, you need to add InsertParameters for each of your nullable type with the Attribute ConvertEmtpyStringToNull="True" :

<InsertParameters>
   <asp:Parameter Name="NullableFieldName" Type="Int32" ConvertEmptyStringToNull="true"  />            
</InsertParameters>
甜警司 2024-07-24 07:29:02

引用:
Tonio - 我没有使用单独的参数,而是使用 DataObjectTypeName 。 我的插入方法采用单个参数,这就是我想要保存回数据库的业务对象。 – 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);
     }
  }

这是一个小技巧,但效果很好。
这样,您可以将对象属性设置为 null 而不是 string.empty,而无需使用 ConvertEmptyStringToNull 设置。

Quote:
Tonio - i'm not using individual params, but DataObjectTypeName instead. My insert method takes a single param, and that's the business object that I want to have saved back to the database. – Scott Ivey May 1 at 12:57

I've fixed it like this:

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

It's a little hack but it works fine.
This way you can set the object property to null instead of string.empty without using the ConvertEmptyStringToNull setting.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文