2012-02-14 8 views
1

У меня есть следующее подробное представление в моем веб-приложении asp.net. То, что должно отображаться, - это строка с ссылкой на редактирование внизу, когда выбрана ссылка для редактирования, строка превращается в раскрывающийся список, который заполняется некоторыми параметрами. Когда нет никаких данных в Enumerable DetailsView не отображается (даже не редактировать ссылку) ...Элемент управления DetailsView не отображается после DataBind()

<asp:DetailsView ID="dvAwardType" 
      runat="server" 
      AutoGenerateRows="False" 
      Width="100%" 
      SkinID="SampleDetailsView" 
      CssSelectorClass="PrettyDetailsView" 
      AutoGenerateEditButton="True" DataKeyNames="guidRequirementId" 
      OnModeChanging="dvAwardType_ModeChanging" 
      OnItemUpdating="dvAwardType_ItemUpdating"> 
      <FieldHeaderStyle Font-Bold="True" Width="150px" /> 
      <Fields> 
       <asp:TemplateField HeaderText="Pool Type"> 
        <ItemTemplate> 
         <%#Eval("strAwardType")%> 
        </ItemTemplate> 
        <EditItemTemplate> 
          <asp:DropDownList ID="ddlAwardType" 
           runat="server"> 
          <asp:ListItem Text="" Value="" /> 
          <asp:ListItem Text="Small Business" Value="SB" /> 
          <asp:ListItem Text="Large Business" Value="LB" /> 
         </asp:DropDownList> 
        </EditItemTemplate> 
       </asp:TemplateField> 
      </Fields> 
     </asp:DetailsView> 


protected void Page_Load(object sender, EventArgs e) 
{ 

    dvAwardType.DataSource = GetData(RequirementId); 
    dvAwardType.DataBind(); 
} 

private IEnumerable GetData(Guid guidRequirementId) 
{ 
    var data = Requirement.BusinessSize(guidRequirementId) 
     .Select(o => 
      new 
      { 
       guidRequirementId = o.guidRequirementId, 
       strAwardType = (o.strBusinessSize != null) ? TranslateSize(o.strBusinessSize) : "" 
      } 
      ); 
    return data; 
} 

private string TranslateSize(string strSize) 
{ 
    string strTranslated = string.Empty; 
    switch(strSize.Trim()) 
    { 
     case "SB": strTranslated = "Small Business"; 
      break; 
     case "LB": strTranslated = "Large Business"; 
      break; 
    } 
    return strTranslated; 
} 

ответ

1

Вы должны добавить EmptyDataTemplate, если вы хотите что-нибудь, чтобы отобразить в DetailsView, когда его источник данных пусто:

<asp:DetailsView ID="dvAwardType" 
    runat="server" 
    AutoGenerateRows="False" 
    Width="100%" 
    SkinID="SampleDetailsView" 
    CssSelectorClass="PrettyDetailsView" 
    AutoGenerateEditButton="True" DataKeyNames="guidRequirementId" 
    OnModeChanging="dvAwardType_ModeChanging" 
    OnItemUpdating="dvAwardType_ItemUpdating"> 
    <EmptyDataTemplate> 
     There is no data to display 
    </EmptyDataTemplate> 

вы можете положить все, что вам нравится в этом EmptyDataTemplate. Я просто включил текст, но вы можете установить элементы управления, гиперссылки, HTML и т. Д.

Смежные вопросы