Como você toca manualmente o objeto complexo para o controle modificado como uma linha em um GridView?
-
22-08-2019 - |
Pergunta
Estou lutando com a sintaxe do banco de dados aqui. Por exemplo, eu tenho uma estrutura de dados como esta -
public class Course{
public string CourseName {get;set;}
public string CourseCode {get;set;}
public List<Instructor> InstructorsTeaching{get;set;}
}
public class Instructor{
public string InstructorName{get;set;}
public string InstructorCode{get;set;}
}
Agora, se eu quiser vincular esta lista de cursos para dizer um Gridview manualmente, eu poderia fazer
<asp:TextBox runat="server" ID="tbCourseName" Text='<%# Bind("CourseName")%>'/>
Embora especifique para o modelo de edição da grade, mas como faço para vincular os instrutores que ensinam propriedades para dizer uma caixa de listagem na mesma linha, não consigo descobrir a sintaxe, aqui está um exaple do que eu tentei e falhei
<asp:ListBox runat="server" ID="tbInstructors"
DataSource='<%# Eval("InstructorsTeaching") as List<Instructor> %>'>
<asp:ListItem Text='<%# Bind("InstructorCode")%>'
Value='<%# Bind("InstructorName")%>'/>...
<as:ListBox/>
Meu código acima não funciona com certeza :). Idealmente, eu gostaria de fazer isso na marcação em vez de código atrás.
Solução
Eu não acho que você pode definir um conjunto de dados assim, tente configurá -lo Evento Rowdatabound de Gridview
Outras dicas
Você atingiu um dos principais motivos pelos quais o ASP.NET bidabinding de banco de dados é uma merda: você realmente não pode fazer a ligação de dados bidirecional aninhada.
Por um lado, embora você possa fazê -lo com avaliar, o ASP.NET não permite a sintaxe do gráfico aninhado com a expressão de ligação (isto é,
Além disso, para controles de lista aninhados, como o seu cenário, cada lista exigirá um controle adicional do DataSource. Você está definindo o DataSource na sua caixa de listagem, que funcionará para expressões de avaliação, mas, para que as expressões vinculativas funcionem, você deve usar o DataSourceId para fornecer o ID de um controle de fonte de dados que fornece o conjunto de resultados interno. E mesmo assim, seus resultados seriam kludgy, pois você só poderia atualizar uma fonte de dados por vez.
O banco de dados bidirecional provavelmente foi escrito com o SQLDatasource em mente e não o objectDataSource. Se você possui um gráfico de objetos de vários níveis, achará doloroso usar o banco de dados bidirecional.