前回(以下のエントリー)契約列のカスタムバインド式が複雑になってしまったので、ビハインドコードに移動させます。
TemplateFieldでGridViewの列をカスタマイズする - プログラマーな日々
ソースコード
HelloWorld.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="HelloWorld.aspx.cs" Inherits="HelloWorld" %> <!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"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> </div> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [HogeTable]"></asp:SqlDataSource> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="FName" DataSourceID="SqlDataSource1"> <Columns> <asp:TemplateField HeaderText="名前"> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("FName") + " " + Eval("LName") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="契約" SortExpression="Contract"> <EditItemTemplate> <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Contract") %>' /> </EditItemTemplate> <ItemTemplate> <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# ContractChecked() %>' Enabled="False" Text='<%# ContractText() %>' /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </form> </body> </html>
HelloWorld.aspx.cs
using System; public partial class HelloWorld : System.Web.UI.Page { // aspxから参照可能にするためにはprotectedにする必要がある。 protected bool ContractChecked() { return IsDBNull ? false : IsContract; } protected string ContractText() { if (IsDBNull) return "未登録"; return IsContract ? "契約あり" : "契約なし"; } private bool IsDBNull { get { object contract = Eval("Contract"); return (contract == DBNull.Value); } } private bool IsContract { get { return (bool) Eval("Contract"); } } }