布尔字段可以有二种值:true或者false。虽然它很简单,但是没有特有的图形表示。 如果在DataGrid中你不想用文本表示布尔字段,你可以用复选框来代替,这样更为直观。 我们下面以SQL Server2000 Northwind数据库中的Employees表为类,Employees表中有 ReportsTo的列,它包含表明某位雇员要向某人汇报的数字值。特别地,这个字段地值 是上级的雇员号,如果雇员不向任何人汇报,它就是null。 Boolean.aspx(其中DataGrid设置如下): <asp:DataGrid Runat="server" AutoGenerateColumns="False" BackColor="white" BorderColor="black" Font-Name="verdana" Font-Size="x-small" CellPadding="2" CellSpacing="0" id="grid"> <HeaderStyle BackColor="brown" ForeColor="white" Font-Bold="True" /> <AlternatingItemStyle BackColor="palegoldenrod" /> <ItemStyle BackColor="beige" /> <Columns> <asp:BoundColumn DataField="EmployeeID" HeaderText="ID"> <ItemStyle BackColor="lightblue" /> </asp:BoundColumn> <asp:TemplateColumn HeaderText="Employee Name"> <ItemTemplate> <%#DataBinder.Eval(Container.DataItem,"TitleOfCourtesy")+","+"<b>"+ DataBinder.Eval(Container.DataItem,"FirstName")+"</b>"+ DataBinder.Eval(Container.DataItem,"LastName")%> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Reports" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:CheckBox Runat=server Checked='<%#HasBoss((int)DataBinder.Eval(Container.DataItem,"boss"))%>' Enabled=False/> </ItemTemplate> </asp:TemplateColumn> <asp:BoundColumn HeaderText="Position" DataField="title"></asp:BoundColumn> </Columns> </asp:DataGrid> 当你写到复选框时,你也许比较奇怪,Employees表中更本就没有boss列呀,这里却使用对boss的绑定,是不是写错啦?呵呵,这里并非 错误,当你向下看时,你就会明白啦! Boolean.aspx.cs中的部分代码如下: private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 if (!Page.IsPostBack) { OnLoadData(); } } private void OnLoadData() { string strConn="DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;"; SqlConnection myconn=new SqlConnection(strConn); //当我语句写到这里时,大家就会明白boss列的来源啦 string strsql="SELECT employeeid, titleofcourtesy, firstname, lastname, title, ISNULL(reportsto,0) AS boss FROM Employees"; SqlDataAdapter da=new SqlDataAdapter(strsql,myconn); DataSet ds=new DataSet(); da.Fill(ds,"MyTable"); grid.DataSource=ds.Tables["MyTable"]; grid.DataBind(); } public bool HasBoss(int bossID) { if (bossID==0) return false; return true; } 赶快运行一下,我们来看一下效果怎么样:不错,是挺直观的,为了不让用户手工的修改复选框,我们在这里已经将复选框的属性Enable设置 为false,难怪这里看上去的复选框会是灰色的。  如果你是一位很挑剔的人,你会对灰色的复选框的效果很不满意,对,这种效果说老实说与界面的整体风格并不是完全统一和吻合的,那么 我们需要做怎么的修改才能做到与界面风格一致呢? 下面将用图像对此做出改进。 Images.aspx(中DataGrid部分): <asp:DataGrid Runat="server" id="DataGrid1" AutoGenerateColumns="False" BackColor="white" CellPadding="2" CellSpacing="0" BorderStyle="solid" BorderColor="black" BorderWidth="1px" font-size="x-small" font-names="verdana"> <AlternatingItemStyle BackColor="palegoldenrod" /> <ItemStyle BackColor="beige" /> <HeaderStyle BackColor="brown" ForeColor="white" Font-Bold="True" /> <Columns> <asp:BoundColumn DataField="employeeid" HeaderText="ID"> <ItemStyle BackColor="lightblue" Font-Bold="True" /> </asp:BoundColumn> <asp:TemplateColumn HeaderText="Employee Name"> <ItemTemplate> <%#DataBinder.Eval(Container.DataItem,"TitleOfCourtesy")+","+"<b>"+ DataBinder.Eval(Container.DataItem,"LastName")+"</b>"+ DataBinder.Eval(Container.DataItem,"FirstName")%> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Reports" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Image Runat=server ImageUrl='<%#GetProperGifFile((int)DataBinder.Eval(Container.DataItem,"boss"))%>'/> </ItemTemplate> </asp:TemplateColumn> <asp:BoundColumn DataField="title" HeaderText="Position" /> </Columns> </asp:DataGrid> Images.aspx.cs: 绑定和Boolean.aspx.cs中对DataGrid的绑定相同,不同的部分就是GetProperGifFile函数部分: public string GetProperGifFile(int bossID) { if (bossID==0) return "Images/unchecked.gif"; return "Images/checked.gif"; } 做好上面的步骤后,让我们来看一下效果吧! 
|