Como você pode vincular dados a um único objeto no .NET?
-
09-06-2019 - |
Pergunta
Gostaria de usar um componente que exponha a propriedade datasource, mas em vez de fornecer à fonte de dados uma lista completa de objetos, gostaria de usar apenas objetos simples.Há alguma maneira de fazer isso ?
O componente mencionado é DevExpress.XtraDataLayout.DataLayoutControl - isso é bastante irrelevante para a questão.
Solução
Databinding espera um objeto IEnumerable, porque ele o enumera exatamente como um loop foreach faz.
Então, para fazer isso, basta agrupar seu único objeto em um IEnumerable.
Até isso funcionaria:
DataBindObject.DataSource = new List<YourObject>().Add(YourObjectInstance);
Outras dicas
No ASP.NET2.0, você pode usar as coleções genéricas para tornar este único objeto uma lista de apenas um objeto nele que você pode banco de dados para qualquer controle de servidor usando o objectDataSource, por exemplo
List<clsScannedDriverLicense> DriverLicenses = new
List<clsScannedDriverLicense>();
//this creates a generic collection for you that you can return from
//your BLL to the ObjectDataSource
DriverLicenses.Add(TheOneObjectThatYouHaveofType_c lsDriverLicense);
Então seu ObjectDataSource ficaria assim:
<asp:ObjectDataSource ID="odsDL" runat="server"
SelectMethod="OrdersByCustomer"
TypeName="YourBLL.UtiltiesClassName"
DataObjectTypeName="clsScannedDriverLicense">
</asp:ObjectDataSource>
Não acho que você tenha muita escolha além de usar uma classe que implemente IEnumerable<T>.Mesmo que a propriedade DataSource fosse inteligente o suficiente para receber um objeto escalar, provavelmente o converteria internamente em um vetor.
No entanto, eu consideraria usar um array simples em vez de List<T> pois isso resultará em menos alocações de memória.Se você não gosta da sintaxe do array (e também para aumentar a legibilidade), você pode usar um método auxiliar:
T [] DataSourceHelper :: toVector (t escalar) {return novo t [] {Scalar};}
Estou atrás da mesma coisa que você.Postei uma nova pergunta Ligação de dados bidirecional de um controle asp.net com modelo personalizado isso tem um pouco de vantagem.Veja o que você pode fazer com isso...
Usando isso no meu formView:
databoundControl.DataSource = new [] { singleObject };
databoundControl.DataBind();