Pergunta

Eu estou usando um FormView com um ObjectDataSource e ligação usando <% # Bind ( "WhateverProp")%> - e todos os meus colunas anuláveis ??estão voltando com valores padrão do tipo neles.

Parece que o objeto FormView não tem uma propriedade ConvertEmtpyStringToNull como os outros recipientes de ligação fazer. Eu encontrei artigos que sugerem que este era um bug no VS 2005 / .Net 2.0 -., Mas não vejo nenhuma dizendo que a resolução era

Alguém tem alguma sugestão de como posso resolver este sem justa re-capturar todos os campos no evento ODS_Inserting? Eu prefiro não ter que escrever código para re-ligar todos os meus campos dependentes no formulário apenas para teste para valores nulos.

Foi útil?

Solução

lutado com isso também. Para um dropdownlist, eu faço isso:

AppendDataBoundItems="true"


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

Para o meu ObjectDataSource, mesmo thoug minha UpdateMethod usa um único parâmetro, a entidade, acrescento Atualização params para cada campo nulo da Entidade com converso ao NULL

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

Eu faço o mesmo para a Inserção.

funciona bem.

Outras dicas

Acabei fazendo isso - tipo de uma abordagem shotgun, mas, neste caso, todas dos meus valores de cadeia vazios devem ser nulos. Eu também considerou o uso de uma matriz de cadeia no código para especificar quais valores devem ser anulado -. E, em seguida, poderia apenas loop thru a matriz de cadeia em vez de por cima de todos os valores

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

Em seu DataSource Object, você precisa adicionar InsertParameters para cada um de seu tipo anulável com o atributo ConvertEmtpyStringToNull = "True":

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

Citação: Tonio - eu não estou usando parâmetros individuais, mas DataObjectTypeName vez. Meu método de inserção recebe um único param, e isso é o objeto de negócios que eu quero ter salvo de volta para o banco de dados. - Scott Ivey 01 de maio às 12:57

Eu fixo-lo assim:

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

É um pequeno hack, mas funciona bem. Desta forma, você pode definir a propriedade objeto para nulo em vez de String.Empty sem usar a configuração ConvertEmptyStringToNull.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top