Событие ASP.NET OnDataBinding для EditItemTemplate DropDownList - PullRequest
2 голосов
/ 02 марта 2010

У меня есть элемент раскрывающегося списка в шаблоне редактирования для представления сведений, определенного следующим образом:

<asp:TemplateField HeaderText="Primary Use">
 <EditItemTemplate>
  <asp:DropDownList ID="ddlPrimaryUseEdit" runat="server" OnDataBinding="DropDownList_DataBinding"
      SelectedValue='<%# Bind("PrimaryUse") %>' ToolTip="Primary Use">
   <asp:ListItem Value="">Unknown</asp:ListItem>
   <asp:ListItem>Manufacturing Facilities</asp:ListItem>
   <asp:ListItem>Residential</asp:ListItem>
   <asp:ListItem>VSSM Office</asp:ListItem>
   <asp:ListItem>Engineering / Office / Warehouse</asp:ListItem>
   <asp:ListItem>Vacant / Surplus Land</asp:ListItem>
  </asp:DropDownList>
 </EditItemTemplate>

У меня есть источник данных, определенный как запрос к моей базе данных, в котором есть столбец с именем "PrimaryUse". Иногда в столбце PrimaryUse может быть значение, которое не указано в качестве одного из элементов раскрывающегося списка, и поэтому мое приложение вылетает при попытке привязать выбранное значение раскрывающегося списка к этому полю. Я пытаюсь создать код в событии OnDataBinding элемента edititemtemplate, который проверит, является ли значение, возвращаемое из источника данных, допустимым значением, указанным в качестве элемента в параметрах раскрывающегося списка. Моя проблема в том, что я не уверен, как получить значение поля источника данных для этого столбца в коде. Это возможно? Может ли кто-нибудь дать мне пример или указать, как это сделать?

Итак, в событии OnDataBinding для шаблона редактирования, указанного выше, я хотел бы сделать что-то вроде следующего (код psuedo):

if datasource.datafieldvalue("PrimaryUse") is in dropdownlist.Items then Valid
else set dropdownlist.Selectedvalue = "Default"

Ответы [ 2 ]

1 голос
/ 02 марта 2010

Вы хотите проверить допустимые значения в обработчике события onDataBinding источника данных. Результатом успешной привязки данных источника данных является приведение списка из EventArgs. Если вы знаете немного LINQ, вы можете написать что-то вроде:

var validData = ((PrimaryUseTable)e.Results).PrimaryUse.Intersect(DropDownList.Items.AsEnumerable())
if(validData.Any())
{
  //Do Stuff
}
else
// Alternate Stuff 
0 голосов
/ 02 марта 2010

Вы должны иметь возможность просто использовать Eval () в коде, чтобы получить это значение. Одной из проблем, однако, является то, что я думаю, что вы пытаетесь сделать это не в том месте ... Это нужно сделать в OnDataBinding (или OnItemDataBound и т. Д.) Для элемента управления данными, а не DropDownList. Событие DropDownList не будет иметь правильного контекста, из-за чего может возникнуть проблема.

...