Как вы можете связать данные с одним объектом в .NET? - PullRequest
3 голосов
/ 07 сентября 2008

Я хотел бы использовать компонент, который предоставляет свойство источника данных, но вместо того, чтобы предоставлять источнику данных полный список объектов, я хотел бы использовать только простой объект. Есть ли способ сделать это?

Упомянутый компонент - DevExpress.XtraDataLayout.DataLayoutControl - хотя это довольно не имеет отношения к вопросу.

Ответы [ 5 ]

8 голосов
/ 07 сентября 2008

При привязке данных ожидается объект IEnumerable, поскольку он перечисляет его, как и цикл foreach.

Итак, для этого просто оберните ваш единственный объект в IEnumerable.

Даже это будет работать:

DataBindObject.DataSource = new List<YourObject>().Add(YourObjectInstance);
1 голос
/ 20 мая 2010

Я за тем же, что и ты. Я разместил новый вопрос Двусторонняя привязка данных настраиваемого шаблонного элемента управления asp.net , который имеет некоторое преимущество Посмотрите, что вы можете сделать из этого ...

1 голос
/ 07 сентября 2008

Не думаю, что у вас есть большой выбор, кроме как использовать класс, реализующий IEnumerable . Даже если бы свойство DataSource было достаточно умным, чтобы взять скалярный объект, оно, вероятно, преобразовало бы его внутренне в вектор.

Однако я бы рассмотрел использование простого массива, а не List , так как это приведет к меньшему выделению памяти. Если вам не нравится синтаксис массива (а также для повышения читабельности), вы можете использовать вспомогательный метод:

T [] DataSourceHelper :: ToVector (T скаляр) { вернуть новый T [] {скаляр}; }

1 голос
/ 07 сентября 2008

В ASP.NET2.0 вы можете использовать общие коллекции, чтобы сделать этот единственный объект список только одного объекта, который вы можете привязать к любому серверу используя источник данных объекта, например

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);

Тогда ваш ObjectDataSource будет выглядеть так:

<asp:ObjectDataSource ID="odsDL" runat="server"
SelectMethod="OrdersByCustomer"
TypeName="YourBLL.UtiltiesClassName"
DataObjectTypeName="clsScannedDriverLicense">
</asp:ObjectDataSource>

Источник

0 голосов
/ 24 июля 2010

Используя это в моем formView:

databoundControl.DataSource = new [] { singleObject };
databoundControl.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...