Asp.net 当GridView没有行时,可以选择显示文本来代替GridView

Asp.net 当GridView没有行时,可以选择显示文本来代替GridView,asp.net,gridview,asp.net-2.0,Asp.net,Gridview,Asp.net 2.0,我有一个基本的GridView,它显示了要执行的任务列表(只是一个示例) 数据源在aspx页面中指定,它是存储过程的结果集 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="..." SelectCommand="pToDoList" SelectCommandType="StoredProcedure"> </asp:SqlDataSource> 因此,呈

我有一个基本的GridView,它显示了要执行的任务列表(只是一个示例)


数据源在aspx页面中指定,它是存储过程的结果集

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="..."
      SelectCommand="pToDoList" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>

因此,呈现的页面将任务显示为数据行(每个任务一行)

我的问题是

当存储过程没有返回数据时,页面将保持空白。我希望有一个文本,而不是说,例如:“今天无事可做”


怎么做?谢谢

向页面添加标签,称之为ErrorLabel,然后在GridView的数据绑定事件中执行类似操作:

protected void GridView1_DataBound(object sender, EventArgs e)
{
    if(GridView1.Rows.Count <= 0) ErrorLabel.Text = "Nothing to do today";
    else ErrorLabel.Visible = false;
}
受保护的void GridView1\u数据绑定(对象发送方,事件参数e)
{

if(GridView1.Rows.Count一个选项是使用页脚显示此消息。在ItemDataBound期间,如果ItemType是页脚,则检查数据源是否为空,如果为空,则显示消息


或者,如果您想在ASPX中按顺序工作,您可以使用EmptyDataTemplate并在其中添加您的消息。

使用EmptyDataTemplate:

<asp:gridview id="CustomersGridView" 
        datasourceid="CustomersSqlDataSource" 
        autogeneratecolumns="true"
        runat="server">
        
        <emptydatarowstyle backcolor="LightBlue"
          forecolor="Red"/>
                    
        <emptydatatemplate>
                
          <asp:image id="NoDataImage"
            imageurl="~/images/Image.jpg"
            alternatetext="No Image" 
            runat="server"/>
                        
            No Data Found.  
                
        </emptydatatemplate> 
                
 </asp:gridview>

有一个属性“EmptyDataText”,允许您在gridview为空时指定文本

我只需添加一个包含文本“今天无事可做”的label控件NodeataLabel,并在页面加载事件中添加一些代码:

if (GridView1.Rows == 0)
{
    GridView1.Visible = false;
}
else
{
    noDataLabel.Visible = false;
}

这有点粗糙,但它在Web表单HTML中嵌入了C。如果没有数据,并且表单被呈现,GridView就会被忽略。

+1谢谢,在我的情况下,这实际上可以很好地工作。我接受了模板建议,因为它在格式方面提供了更大的灵活性
if (GridView1.Rows == 0)
{
    GridView1.Visible = false;
}
else
{
    noDataLabel.Visible = false;
}