GridViewの一番左端の列に連番をふりたくなった。
ということでれっつトライ。
いつもどおりの、Personクラスを用意する。今回は、ObjectDataSourceを使うつもりなので、データ取得のためのメソッドも定義した。
namespace WebApplication1.Data
{
public class Person
{
public string Name { get; set; }
/// <summary>
/// テスト用データ
/// </summary>
/// <returns></returns>
public static Person[] AllPeople()
{
return new[]
{
new Person { Name = "田中 太郎" },
new Person { Name = "田中 二郎" },
new Person { Name = "田中 三郎" },
new Person { Name = "田中 四郎" },
new Person { Name = "田中 五郎" },
new Person { Name = "田中 六郎" },
new Person { Name = "田中 七郎" },
new Person { Name = "田中 八郎" },
new Person { Name = "田中 九郎" },
new Person { Name = "田中 十郎" },
};
}
}
}
これが出来たら、画面にObjectDataSourceをPeopleDataSourceという名前で置いてPerson.AllPeopleを使うように設定する。
<asp:ObjectDataSource ID="PersonDataSource" runat="server"
SelectMethod="AllPeople" TypeName="WebApplication1.Data.Person"></asp:ObjectDataSource>
もちろん、この設定自体はデザイナからしている。(手書きで出来るほど覚えてない…)
そしたら、次にGridViewを置く。GridViewのDataSourceにPeopleDataSourceを設定してNameプロパティの値を表示するようにカラムを追加する。
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="PersonDataSource">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
</Columns>
</asp:GridView>
これで、太郎~十郎までが表形式で表示されるようになる。
これに連番をふってみようと思う。連番をふるためにはTemplateFieldを定義しないといけない。
この中で、Containerというものが使えるので、その中にある
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="PersonDataSource">
<Columns>
<asp:TemplateField HeaderText="No">
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
</Columns>
</asp:GridView>
これで連番が表示される!会社からBlog書いてるので画像UPできないのでどんな表が表示されたのかを見てもらうために、実行結果のHTMLを下に貼り付けてみる。
No |
Name |
1 |
田中 太郎 |
2 |
田中 二郎 |
3 |
田中 三郎 |
4 |
田中 四郎 |
5 |
田中 五郎 |
6 |
田中 六郎 |
7 |
田中 七郎 |
8 |
田中 八郎 |
9 |
田中 九郎 |
10 |
田中 十郎 |
いい感じ。