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

Foi útil?

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?

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