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.

Foi útil?

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>

Fonte

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top