I have the following detailsview in my asp.net web application. What it should show is a string with an edit link under, when the edit link is selected then the string turns into a dropdown list that is populated with some options. When there is no data in the Enumerable the DetailsView does not show up (not even the edit link)...
<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;
}
You need to add an EmptyDataTemplate
if you want anything to display in the DetailsView
when its data source is empty:
<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>
You can put whatever you like inside that EmptyDataTemplate
. I just included text, but you can put controls, hyperlinks, HTML, etc.