一、如何让gridview在没有数据时显示表头
如何让gridview在没有数据时显示表头

当对GridView控件进行数据绑定时,如果绑定的记录为空,网页上就不显示GridView,造成页面部分空白,页面布局结构也受影响。下面讨论的方法可以让GridView在没有数据记录的时候显示表的字段结构和显示提示信息。
为了让GridView显示数据,在数据库中建立表temple,其字段如下:
建立一个asp.net网站工程,在页面中添加GridView和几个按钮,代码如下所示:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%>
<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<title>GridView绑定记录为空显示表头测试</title>
<form id="form1" runat="server">
<div style="font-size:13px;">
<asp:GridView ID="GridViewEmptyDataTest" runat="server" AutoGenerateColumns="False" EmptyDataText="Data Is Empty" BackColor="White" BorderColor="LightGray" BorderStyle="Double" BorderWidth="3px"
CellPadding="4" GridLines="Horizontal" Width="500px">
<asp:BoundField DataField="temple_id" HeaderText="temple_id" Visible="False">
<asp:BoundField DataField="temple_name" HeaderText="名称">
<ItemStyle BorderColor="LightGray" BorderStyle="Double" BorderWidth="1px" Width="100px"/>
<asp:BoundField DataField="location" HeaderText="地址">
<ItemStyle BorderColor="LightGray" BorderStyle="Double" BorderWidth="1px" Width="300px"/>
<asp:BoundField DataField="build_date" HeaderText="建设时间">
<ItemStyle BorderColor="LightGray" BorderStyle="Double" BorderWidth="1px" Width="100px"/>
<FooterStyle BackColor="White" ForeColor="#333333"/>
<RowStyle BackColor="White" ForeColor="#333333"/>
<SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White"/>
<PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center"/>
<HeaderStyle BackColor="CornflowerBlue" Font-Bold="True" ForeColor="White"/>
<asp:Button ID="ButtonHasDataBind" runat="server" Text="有数据绑定" Width="109px" OnClick="ButtonHasDataBind_Click"/>
<asp:Button ID="ButtonQueryEmptyBind" runat="server" Text="查询结果为空绑定" Width="142px" OnClick="ButtonQueryEmptyBind_Click"/>
<asp:Button ID="ButtonConstructTableBind" runat="server" Text="构造空的DataTable绑定" Width="164px" OnClick="ButtonConstructTableBind_Click"/>
<asp:Button ID="ButtonNormalBind" runat="server" Text="普通空数据绑定" Width="127px" OnClick="ButtonNormalBind_Click"/></div>
GridView要绑定的字段和temple的字段一样,在这里我们利用GridView原有的功能,设定当数据为空是显示“Data Is Empty”,如果没有设定EmptyDataText属性,当绑定的记录为空时,GridView将不在页面显示。
二、如何让GridView控件在绑定的数据源没有数据时也显示标题
以前的DataGrid在绑定数据源的时候,只要绑定的数据源不是null,而是带有表结构的,都可以显示出列表的标题。而GridView中却不是如此,就算数据源有表结构,只要没有行记录,就无法显示标题。
我用了如下几种方法来显示,供大家参考一下:
1.使用最简单的,当返回的数据为null时,没有表结构,那么先获取对应的表结构,可以从数据库中获取,也可以临时组合,如:
DataTable dt= new DataTable("column");
dt.Columns.Add(ID, typeof(System.Int32));
dt.Columns.Add(Name, typeof(System.String));
如果返回的数据源有表结构,只是没有行记录,就不用做上面这步了。
然后使用DataRow dr= dt.NewRow();
然后再绑定到GridView,这样就可以显示标题了。
这种方法简单,但是有些问题,如果列表中有其他控件,如Select命令,那么显示出来空行连Select也显示出来了,这样看上去会让用户误认为是有一条记录。当然,可以在RowDataBound中判断一下状态,是否清除掉所有控件。
2.使用EmptyDataText属性来提示用户没有记录,但是这样无法显示标题。
当绑定到 GridView控件的数据源不包含任何记录时,该控件中显示空数据行。使用 EmptyDataText属性指定将在空数据行中显示的文本。
3.使用EmptyDataTemplate属性。里面可以包含控件和html标记。
如果同时设置了 EmptyDataText和 EmptyDataTemplate属性,则 EmptyDataTemplate属性优先。
4.CreateChildControls(IEnumerable, bool)方法:
此方法是根据数据源和相关的设置来创建需要显示的控件,主要是一个表格,此返回创建的控件数,
如果数据源中没有数据,GridView将根据 EmptyDataTemplate和 EmptyDataText两个属性来显示
信息,如果这两个属性都没有设置,GridView将不显示任务的内容。
在 DataGrid中,如果数据源没有数据,将也会显示一个表头,GridView不显示表头了,对于有些
如果需要在没有数据的时候也要显示表示,可以重写此方法,在此方法,通过 CreateColumns方法
获取到需要显示的列,在调用 CreateRow方法创建一行,在调用 IntializeRow方法来初始化创建
的行,最后在把行添加到表格里,这里需要说明的一点是,如果 GridView没有显示任何的东西,
那么它的 Controls里是没有一个控件的,我们需要自己创建一个 Table对象,并添加到 Controls集合中。
三、C#中datagridview手动绑定数据后怎么编辑列
在查询数据库,返回结果集时更改查询语句,直接返回中文名称的表。例如:select wordID as'单词ID',wordEnglish as'英文单词', wordChinese as'中文解释' from Word
这样的话绑定数据到DataGradView控件时仅仅使用DataGradView控件的一个属性datagridview1.DataSource足够了!!!(如果是WEB程序后面加datagridview1.DataBind();)
查询的时候最好把顺序排好,这样界面代码的复杂程度大大减少。
根据你的补充,你是为显示了所有列而烦恼吧。
这样搞定: this.datagridview1.Columns[1].Visible= false;
或者这样:this.datagridview1.Columns["userID"].Visible= false;
不想让哪一列显示就更改哪一列的Visible属性值为false即可!(列的标示可以用下标,也可以用数据库查出数据时的列名)
另外你说HeaderText属性,WinForm里的DataGradView当然有这个属性了,它是用来设置列头文字的,你可以设置某列的列头文字为英文,也可以设置成中文,示例如下:
this.datagridview1.Columns[1].HeaderText="UserName";
this.datagridview1.Columns[1].HeaderText="用户名字";
这样解释你该清清楚楚,明明白白了吧~
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!









