ASP.NETのGridViewコントロールは、デフォルトでは thead, tbody, tfootの要素を生成しません。
試しに、サンプルプロジェクトを作成して、Default.aspxにGridViewコントロールを配置して、以下のようにコードを記述します。
C#の例
/// <summary> /// 従業員リストクラス /// </summary> private class EmployeeList { private string _empno; private string _name; private DateTime _hiredate; /// <summary> /// 従業員番号 /// </summary> public string Empno { get { return _empno; } set { _empno = value; } } /// <summary> /// 指名 /// </summary> public string Name { get { return _name; } set { _name = value; } } /// <summary> /// 入社日 /// </summary> public DateTime Hiredate { get { return _hiredate; } set { _hiredate = value; } } } /// <summary> /// ページロード時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Page_Load(object sender, EventArgs e) { List<EmployeeList> emplist = new List<EmployeeList>(); // 10件のデータを作成 for (int i = 0; i < 10; i++) { EmployeeList emp = new EmployeeList(); emp.Empno = i.ToString().PadLeft(4, '0'); emp.Name = "User Name" + i.ToString(); emp.Hiredate = DateTime.Now.AddYears(-i); emplist.Add(emp); } // GridViewにデータを表示 GridView1.DataSource = emplist; GridView1.DataBind(); }
上記の入力が完了したら[F5]を押して実行します。
実行結果は下図のようになります。
生成された html の table部分は以下の通りで、thead, tbody, tfoot 要素はありません。
<table cellspacing="0" cellpadding="4" border="0" id="GridView1" style="color:#333333;border-collapse:collapse;"> <tr style="color:White;background-color:#507CD1;font-weight:bold;"> <th scope="col">Empno</th> <th scope="col">Name</th> <th scope="col">Hiredate</th> </tr> <tr style="background-color:#EFF3FB;"> <td>0000</td> <td>User Name0</td> <td>2014/05/03 22:15:55</td> </tr> <tr style="background-color:White;"> <td>0001</td> <td>User Name1</td> <td>2013/05/03 22:15:55</td> </tr> <tr style="background-color:#EFF3FB;"> <td>0002</td> <td>User Name2</td> <td>2012/05/03 22:15:55</td> </tr> <tr style="background-color:White;"> <td>0003</td> <td>User Name3</td> <td>2011/05/03 22:15:55</td> </tr> <tr style="background-color:#EFF3FB;"> <td>0004</td> <td>User Name4</td> <td>2010/05/03 22:15:55</td> </tr> <tr style="background-color:White;"> <td>0005</td> <td>User Name5</td> <td>2009/05/03 22:15:55</td> </tr> <tr style="background-color:#EFF3FB;"> <td>0006</td> <td>User Name6</td> <td>2008/05/03 22:15:55</td> </tr> <tr style="background-color:White;"> <td>0007</td> <td>User Name7</td> <td>2007/05/03 22:15:55</td> </tr> <tr style="background-color:#EFF3FB;"> <td>0008</td> <td>User Name8</td> <td>2006/05/03 22:15:55</td> </tr> <tr style="background-color:White;"> <td>0009</td> <td>User Name9</td> <td>2005/05/03 22:15:55</td> </tr> </table>
ここからが本題です。
GridViewコントロールにはRowCreatedという、行を生成したときに発生するイベントがあります。
このイベントの引数、GridViewRowEventArgs の Row.RowTypeを調べると、現在作成されたのが、ヘッダーなのか、ボディなのか、それともフッターなのかを知ることができます。
このとき、Row.TableSelectionプロパティの設定を行うことで、thead, tbody, tfoot の要素を出力することが可能になります。
/// <summary> /// 行生成時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { switch (e.Row.RowType) { case DataControlRowType.Header: e.Row.TableSection = TableRowSection.TableHeader; // theadを出力 break; case DataControlRowType.DataRow: e.Row.TableSection = TableRowSection.TableBody; // tbodyを出力 break; case DataControlRowType.Footer: e.Row.TableSection = TableRowSection.TableFooter; // tfootを出力 break; } }
上記入力後、実行して出力された html の table部分は以下の通りです。
<table cellspacing="0" cellpadding="4" border="0" id="GridView1" style="color:#333333;border-collapse:collapse;"> <thead> <tr style="color:White;background-color:#507CD1;font-weight:bold;"> <th scope="col">Empno</th><th scope="col">Name</th><th scope="col">Hiredate</th> </tr> </thead> <tbody> <tr style="background-color:#EFF3FB;"> <td>0000</td><td>User Name0</td><td>2014/05/03 22:57:53</td> </tr><tr style="background-color:White;"> <td>0001</td><td>User Name1</td><td>2013/05/03 22:57:53</td> </tr><tr style="background-color:#EFF3FB;"> <td>0002</td><td>User Name2</td><td>2012/05/03 22:57:53</td> </tr><tr style="background-color:White;"> <td>0003</td><td>User Name3</td><td>2011/05/03 22:57:53</td> </tr><tr style="background-color:#EFF3FB;"> <td>0004</td><td>User Name4</td><td>2010/05/03 22:57:53</td> </tr><tr style="background-color:White;"> <td>0005</td><td>User Name5</td><td>2009/05/03 22:57:53</td> </tr><tr style="background-color:#EFF3FB;"> <td>0006</td><td>User Name6</td><td>2008/05/03 22:57:53</td> </tr><tr style="background-color:White;"> <td>0007</td><td>User Name7</td><td>2007/05/03 22:57:53</td> </tr><tr style="background-color:#EFF3FB;"> <td>0008</td><td>User Name8</td><td>2006/05/03 22:57:53</td> </tr><tr style="background-color:White;"> <td>0009</td><td>User Name9</td><td>2005/05/03 22:57:53</td> </tr> </tbody> <tfoot> </tfoot> </table>
このように、Row.TableSelectionプロパティの設定を行うことで、thead, tbody, tfootの要素を出力することができます。
Please follow and like us:
コメント