I can't seem to get either EmptyDataTemplate
or EmptyDataText
of a GridView
to work.
I'm fetching the GridView
contents in de codebehind and attaching them with using DataBind()
. I've tried having them as null
and as an empty List
, and in both cases the text I put into EmptyDataTemplate
or EmptyDataText
is not displayed.
What am I doing wrong?
EDIT (Code snippet)
This is my GridView:
<asp:GridView ID="grid" runat="server" EmptyDataText="EMPTY">
</asp:GridView>
And I've tried these two for binding the data:
grid.DataSource = new List<object>();
grid.DataBind();
grid.DataSource = null;
grid.DataBind();
This problem is caused by using the so-called CSS-Friendly Control Adapters. With them enabled (and they seem to be enabled by default), EmptyDataTemplate
and EmptyDataText
don't work as expected.
To disable the adapters, go to the App_Browsers
folder, and in the CSSFriendlyAdapters.browser
file, comment out the following section (or the section related to the control you're using):
<adapter controlType="System.Web.UI.WebControls.GridView"
adapterType="CSSFriendly.GridViewAdapter" />
The big problem is the styles will go away.
I ran into a similar problem and noticed I had logic around my DataBind to ignore the databinding method if my datasource was empty.
The EmptyDataTemplate
will override any EmptyDataText
, so it could be that you've defined the template incorrectly somehow, which is keeping you from seeing the EmptyDataText
.
If you're binding an empty list to the GridView, it should display the EmptyDataText
, so long as you don't have a conflicting EmptyDataTemplate
, e.g.
<%-- GridTest.ascx --%>
<asp:GridView ID="Grid" runat="server" EmptyDataText="No Data!" />
// GridTest.ascx.cs
Grid.DataSource = new List<object>();
Grid.DataBind();
Are you doing something different than this?
Can User Empty Data Template.....
<Columns>
............
............
............
<Columns>
<EmptyDataTemplate>
<asp:Label ID="lblEmptyTxt" runat="server" Text="No Data"></asp:Label>
</EmptyDataTemplate>
</asp:GridView>
And don't do what I did - The GridView ForeColor property wasn't set and it defaults to white which was also my BackColor property!