Как вы можете привязать один объект к данным в .NET?
-
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();