代码之家  ›  专栏  ›  技术社区  ›  Scott Ivey

FormView ConvertEmptyStringToFull和binding

  •  5
  • Scott Ivey  · 技术社区  · 17 年前

    我将FormView与ObjectDataSource一起使用,并使用<%#进行绑定绑定(“WhateverProp”)%>-我的所有可为空的列都会返回,其中包含该类型的默认值。

    FormView对象似乎不像其他绑定容器那样具有ConvertemtPsystingToFull属性。我发现一些文章认为这是VS2005/.NET2.0中的一个bug,但没有看到任何人说解决方案是什么。

    有人对我如何在不重新捕获ODS_插入事件中的所有字段的情况下解决这个问题有什么建议吗?我不希望为了测试空值而编写代码来重新绑定表单上的所有绑定字段。

    4 回复  |  直到 17 年前
        1
  •  6
  •   devMomentum    17 年前

    也在挣扎。

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

    对于我的ObjectDataSource,即使我的UpdateMethod只接受一个参数entity,我也会为convert to NULL的实体的每个可空字段添加更新参数

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

    我对插页也这样做。

        2
  •  2
  •   Scott Ivey    17 年前

    全部的

    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
  •  1
  •   Tonio Tonio    17 年前

    在对象数据源中,您需要为每个可为空的类型添加InsertParameters,属性为convertemtPsystringTonull=“True”:

    <InsertParameters>
       <asp:Parameter Name="NullableFieldName" Type="Int32" ConvertEmptyStringToNull="true"  />            
    </InsertParameters>
    
        4
  •  1
  •   Max    16 年前

    引述: Tonio-我没有使用单个参数,而是使用DataObjectTypeName。我的insert方法只接受一个参数,这就是我想要保存回数据库的业务对象。斯科特·艾维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);
         }
      }
    

    这是一个小技巧,但效果很好。

    推荐文章