Элемент управления DetailsView не отображается после DataBind () - PullRequest
1 голос
/ 15 февраля 2012

У меня есть следующий подробный вид в моем веб-приложении asp.net. То, что это должно показать, является строкой со ссылкой редактирования, под которой, при выборе ссылки редактирования строка превращается в выпадающий список, который заполнен некоторыми параметрами. Когда в Enumerable нет данных, 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">
            <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 Ответ

1 голос
/ 15 февраля 2012

Вам нужно добавить 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 и т. Д.

...