привязка данных списка данных asp.net

Я использую ASP.NET/С# DataList.

 <asp:DataList ID="EquipmentList" RepeatColumns="5".....  

У меня есть следующая строка внутри тега <ItemTemplate>:

 <a href=""`><%# {I want to put something here but dont know how} %> </a>  

В моем коде у меня есть переменная NameValueCollection, которая содержит все строки:

 NameValueCollection myListofStrings = //calling a method here that populates myListofStrings   
this.EquipmentList.DataSource =  myListofStrings;  
this.EquipmentList.DataBind();

Подскажите, пожалуйста, как привязать эту переменную NameValueCollection к моему тегу DataList в разметке? Также были бы полезны дополнительные знания о том, как связать DataList с DataSet, sqldatareader, IList<>.

Спасибо вам всем. но пока что мне писать внутри тега, если, скажем, мне нужно привязать к переменной 1NameValueCollection1, как в моем случае выше. У него нет свойств или столбцов, поэтому я не могу написать что-то вроде Eval("propertyname"), что является ответом, который мне дал большинство здесь. Это так же, как я привязываю его к массиву строк.

Так что мне теперь писать?


person zack    schedule 26.10.2010    source источник


Ответы (4)


Пожалуйста, может кто-нибудь сказать мне, как привязать эту переменную NameValueCollection к моему тегу datalist в разметке? Также были бы полезны дополнительные знания о том, как связать список данных с набором данных, sqldatareader, IList‹>. Спасибо

Я объявляю свой List<ComplexObject> в своем отделенном коде (скажем... в методе, прикрепленном к OnClick), а затем я привязываю его к данным следующим образом:

private void DoDataGetAndBind() {
  List<ComplexObject> complexObjects = _dataAccessLayer.GetComplexObjectsMethod(parameter1, parameter2, sortParameter);
  datalist1.DataSource = complexObjects;
  datalist1.DataBind();
}

Теперь, пожалуйста, поймите, насколько упрощен мой код, я не проверял ошибки (например, если база данных упала или вы не вернули никаких результатов), и я не определял параметры или ComplexObject (потому что я предполагаю, что вы понимаете, как эти вещи работай).

Затем в .aspx страницы я бы определил внутри ItemTemplate из DataList полей управления, где я <%# Eval('ComplexObjectFieldOneName') %> или <%# Eval('ComplexObjectFieldTwoName') %> (и т. д.).

Итак, учитывая

public class ComplexObject {
  public string MyFirstField {get;set;}
  public string MySecondField {get;set;}
}

Я бы определил поля в .aspx как <%# Eval('MyFirstField') %> и <%# Eval('MySecondField') %>

Хорошо, это было довольно затянуто, поэтому я надеюсь, что это действительно помогло.


Еще один момент: вы также можете использовать ObjectDataSources (или производные классы, такие как SqlDataSource и т. д.) и выполнять все ссылки на .aspx, предполагая правильно построенные классы объектов. Что-то рассмотреть.

person jcolebrand    schedule 26.10.2010
comment
Благодарю. но на данный момент, что я пишу внутри тега, если, скажем, я ДОЛЖЕН привязываться к переменной NameValueCollection, как в моем случае выше. У него нет свойств или столбцов, поэтому я не могу написать что-то вроде Eval(propertyname), что является ответом, который мне дал большинство здесь. Это так же, как я привязываю его к массиву строк. Так что мне теперь писать? - person zack; 26.10.2010
comment
@VP ~ @Dismissile уже дал вам ответ. Вы бы Eval('Value') или Eval('Name') в зависимости от того, что вы хотели. - person jcolebrand; 26.10.2010
comment
@VP ~ Беру свои слова обратно. Нет, ты не можешь. Поэтому вместо этого вы должны попытаться найти другую форму хранения вашей информации или преобразовать ее прямо перед тем, как вам нужно будет ее использовать. - person jcolebrand; 26.10.2010
comment
@VP ~ Мои извинения. Я вижу, что я действительно не могу предположить, что вы знаете, что 'value' в С# означает символ, а для строк следует использовать "value" ... другими словами, Acceptable : '|', "|", "||" ~~ Not Acceptable : '||' - person jcolebrand; 26.10.2010
comment
Я понимаю разницу между строкой внутри и char внутри ''. Ссылка, которую вы разместили выше, у меня работает. Большое спасибо. - person zack; 26.10.2010
comment
@VP ~ лол, я так и думал ;) ... Или, по крайней мере, я на это надеялся. Я просто сокращаю это в примерах. Может быть, я не должен. Просто выглядит чище, чтобы использовать одинарную кавычку. Рад, что ссылка помогла. - person jcolebrand; 26.10.2010

‹%# %> — это синтаксис привязки данных.

Обычно вы делаете что-то вроде:

<%# Eval("PropertyName") %>

Это определяет одностороннюю привязку к свойству/столбцу с именем PropertyName в вашем источнике данных.

В вашем случае, я думаю, вы можете сделать либо Name, либо Value, поскольку это общедоступные свойства NameValueCollection.

Вы также можете выполнить двустороннюю привязку данных, используя:

<%# Bind("PropertyName") %>
person Dismissile    schedule 26.10.2010

Привяжите источник списка данных к представлению данных или таблице данных.

Список данных.Источник данных = Представление данных;

   <ITEMTEMPLATE>
    <ASP:LABEL id="lblField" runat="server" Font-Bold="true">
    <%# DataBinder.Eval(Container.DataItem, "DATAITEMNAME") %>
    </ASP:LABEL>
    </ITEMTEMPLATE>
person Kirit Chandran    schedule 26.10.2010
comment
нет DATAITEMNAME, поскольку вы можете видеть, что я привязываю его к коллекции namevalue. Это просто набор строк. Нет свойств для привязки. я обновил свой вопрос - person zack; 26.10.2010

<%# (EquipmentList.DataSource as NameValueCollection)[Container.DataItem as string] %>

Источник данных — это фактически коллекция, к которой вы привязываетесь, но мы должны преобразовать ее. И, конечно же, Container.DataItem — это КЛЮЧ, в котором я конвертирую в строку, чтобы его можно было использовать.

person wtfidgafmfgtfooh    schedule 02.04.2015
comment
Как правило, ответы гораздо полезнее, если они включают объяснение того, для чего предназначен код, и почему это решает проблему, не вводя других. (Это сообщение было отмечено по крайней мере одним пользователем, предположительно потому, что они думали, что ответ без объяснения причин следует удалить.) - person Nathan Tuggy; 04.04.2015