FormView ConvertEmptyStringToNull e ligao
-
09-09-2019 - |
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.
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.