【问题标题】:FormView ConvertEmptyStringToNull and bindingFormView ConvertEmptyStringToNull 和绑定
【发布时间】:2010-10-19 16:50:28
【问题描述】:

我正在使用带有 ObjectDataSource 的 FormView 并使用 进行绑定 - 我的所有可空列都返回了其中类型的默认值。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    我对插入做同样的事情。

    工作正常。

    【讨论】:

    • 今天刚刚遇到这个问题 - 并再次重新阅读所有答案。你的绝对是最正确的。即使在 ODS 上使用 DataObjectTypeName 属性,您也可以指定参数名称。很好的答案 - 我已将标记的答案更改为指向您的答案。
    • 这也解决了一个类似的问题,即如果绑定的文本框在提交之前在客户端被禁用,则 ObjectDataSource 会引发异常。添加显式参数解决了这个问题。
    【解决方案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;
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • Tonio - 我没有使用单个参数,而是使用 DataObjectTypeName。我的 insert 方法采用单个参数,这就是我想要保存回数据库的业务对象。
      • 托尼奥 - 重读 - 你有一半在那里,所以 +1。 @devMomentum 有更正确的答案,所以他得到了标记的答案。
      【解决方案4】:

      引用: 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);
           }
        }
      

      这是一个小技巧,但它工作正常。 这样,您可以将对象属性设置为 null 而不是 string.empty,而无需使用 ConvertEmptyStringToNull 设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多