ASP.NET ObjectDataSource Ligação Automaticamente para o Repetidor - é Possível?
-
09-06-2019 - |
Pergunta
Eu tenho uma Questão de classe:
class Question {
public int QuestionNumber { get; set; }
public string Question { get; set; }
public string Answer { get; set; }
}
Agora eu faço uma ICollection destes disponíveis através de um ObjectDataSource, e exibi-los usando um Repetidor vinculados à fonte de dados.Eu uso <%#Eval("Pergunta")%> para exibir a Pergunta, e eu uso uma caixa de Texto e <%#Bind("Resposta")%> para aceitar uma resposta.
Se o meu ObjectDataSource retorna três pontos de objetos, então a minha Repetidor apresenta as três perguntas com uma caixa de Texto a seguir a cada pergunta para o usuário fornecer uma resposta.
Até agora funciona muito bem.
Agora quero dar a resposta do usuário e colocá-lo de volta para a relevante Questão de classes, o que eu, então, persistir.
Certamente, o quadro deve cuidar de tudo isso para mim?Eu usei o método Bind, eu especifiquei um DataSourceID, eu tenha especificado um método de Atualização na minha ObjectDataSource classe, mas não parece haver nenhuma maneira de realmente kickstart a coisa toda.
Eu tentei adicionar um botão de Comando e o código de chamada MyDataSource.Update(), mas ele tenta chamar de meu método de Atualização com e sem parâmetros, ao invés de incluir a Questão parâmetro de espera.
Certamente, há uma maneira fácil de atingir tudo isso com pouco ou nenhum code-behind?
Parece que todos os bits estão lá, mas há um pouco de cola em falta para colocá-los todos juntos.
Ajuda!
Anthony
Solução
Você tem que lidar com o evento postback (clique no botão ou o que seja), em seguida, enumerar o repetidor de itens como este:
foreach(RepeaterItem item in rptQuestions.Items)
{
//pull out question
var question = (Question)item.DataItem;
question.Answer = ((TextBox)item.FindControl("txtAnswer")).Text;
question.Save() ? <--- not sure what you want to do with it
}
Outras dicas
O método bind realmente não é para o repetidor, é mais para o formview ou gridview, onde você está editando apenas um item na lista e não de cada item na lista.
Em ambos você clique em um botão editar que, em seguida, dá-lhe controles acoplados (ligado utilizando o bind) e, em seguida, bater a salvar link que automático evita que o item de volta para sua fonte de dados, sem qualquer código de trás.
Então qual é o ponto em que o método Bind (ao contrário do método Eval) se eu ligar tudo de volta manualmente no postback?
Ben:De ter tentado, de item.DataItem é sempre nulo, e de acordo com o seguinte post, ele não é concebido para ser usado dessa forma:
http://www.netnewsgroups.net/group/microsoft.public.dotnet.framework.aspnet/topic4049.aspx
Assim como na terra, posso vincular manualmente-lo de volta?