Pergunta

Estou usando um FormView com um objectDataSource. Quando o botão Salvar é clicado, gostaria de modificar o objeto vinculado a dados antes de ser definido para o método de atualização do ObjectDataSources.

Eu tentei o evento de atualização do FormView, bem como o evento de atualização da fonte de dados do objeto, mas não consigo descobrir como acessar o objeto vinculado a dados. FormView.dataitem é nulo nesses eventos.

Ou, em outras palavras, gostaria de interceptar e modificar o datAitem antes de ele ser passado para o objectDataSource UpdateMethod.

Para dar um pouco mais de detalhes sobre por que eu quero fazer isso, existem alguns valores no formulário que não podem ser bancos de dados com a construção na funcionalidade. Um dos controles é a lista de caixa de seleção. Estou usando o evento de banco de dados para preencher as verificações, mas agora também preciso de uma maneira de atualizar meu objeto para refletir os valores do formulário. Existem também outros controles com situações semelhantes.

Foi útil?

Solução

Por que você não escreve seu próprio objeto de negócios (também conhecido como objectDataSource) e envolve o objeto ObjectDataSource original? Você pode interceptar o que quiser e modificá -lo no método de salvamento do objeto ObjectDataSource original.

Outras dicas

Sei que essa é uma pergunta antiga, mas tive o mesmo problema e achei a resposta que acho que Bob está procurando.

A solução é usar o evento de atualização do ObjectDataSource no formulário da Web. O evento de atualização inclui o objeto ObjectDataSourCemethOdEventArgs como um parâmetro. A classe ObjectDataSourCemethOventArgs inclui uma propriedade chamada "InputParameters", e você pode usá -lo para acessar o objeto de dados e modificar o conteúdo antes que a atualização ocorra. Você precisa converter o objeto InputParameters em um tipo de anoto de ordem primeiro (o espaço nomes completo é System.Collection.Specialized.OrderEdDictionary)

Parece algo assim:

protected void myObjectDataSource_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
    OrderedDictionary parameters = (OrderedDictionary)e.InputParameters;
    MyDataObject updatedData = (MyDataObject)parameters[0];
    DropDownList myDropDown = (DropDownList)FormView1.FindControl("myDropDown")
    updatedData.SomeDataValue = myDropDown.SelectedValue;
}

O Dataitem está disponível apenas quando o banco de dados.
Os dados são então vinculados a controles dentro do seu FormView.
Use MyFormView.FindControl (ID da String) para acessar valores vinculados antes de atualizar.

Se o banco de dados bidirecional não funcionar para você, você deve inserir seu objeto, preencher manualmente as propriedades e atualizar ou confirmar as alterações.

Como você está no evento de atualização, o FormView.dataitem é nulo porque a ligação de dados ainda não ocorreu. Você deve acessar os dados através do controle de formulário que contém seus dados de interesse.

Tente aplicar sua modificação de dados durante o evento OnDatabinding do controle relevante.

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