Как вы можете привязать один объект к данным в .NET?

StackOverflow https://stackoverflow.com/questions/48521

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Упомянутый компонент — DevExpress.XtraDataLayout.DataLayoutControl — однако это не имеет никакого отношения к вопросу.

Это было полезно?

Решение

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

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

Даже это сработает:

DataBindObject.DataSource = new List<YourObject>().Add(YourObjectInstance);

Другие советы

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

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>

Источник

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

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

T [] dataSourceHelper :: tovector (t Scalar) {return new t [] {scalar};}

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

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

databoundControl.DataSource = new [] { singleObject };
databoundControl.DataBind();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top