QA@IT
«質問へ戻る

質問を投稿

ASP.NETのグリッドビューのチェックボックスについて、イメージの使用や、空白カラム、ソートについて質問

ASP.Xファイル

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="t1" DataSourceID="SqlDataSource1" AllowSorting="True" Height="115px" 
        onrowcreated="GridView1_RowCreated" Width="87px">
        <Columns>
            <asp:BoundField DataField="t1" HeaderText="t1" ReadOnly="True" 
                SortExpression="t1" />
            <asp:BoundField DataField="chStr" HeaderText="chStr" SortExpression="chStr" />
            <asp:BoundField DataField="ch" HeaderText="ch" SortExpression="ch" />
            <asp:CheckBoxField DataField="chBit" HeaderText="chBit" 
                SortExpression="chBit" />
        </Columns>
</asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:testdbConnectionString %>" 
        SelectCommand="SELECT [t1], [chStr], [ch], [chBit] FROM [tbl001]">
</asp:SqlDataSource>

csファイル

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowIndex >= 0) {
        var cb = (CheckBox)e.Row.Cells[3].Controls[0];
        cb.Enabled = true;
    }
}

データの内容(chBitはyes/no型)

t1|t2                     |t3 |t4                     |ch  |chStr|chBit
-----------------------------------------------------------------------
2 |適当な文字列を入れてね2|aaa|2013-04-04 17:20:09.460|1   |true |False
3 |適当な文字列を入れてね3|aaa|2013-04-04 17:20:09.460|0   |false|True
4 |適当な文字列を入れてね4|aaa|2013-04-04 17:20:09.460|NULL|true |False
5 |適当な文字列を入れてね5|aaa|2013-04-04 17:20:09.460|NULL|false|True
6 |適当な文字列を入れてね6|aaa|2013-04-04 17:20:09.463|NULL|NULL |NULL
チェックボックスはchBitに結びつけられています

というような、WEBフォームを作ったとき、
チェックボックスを使ってやりたいことが2種類あるのですが、なかなかできずに困っています

1.通常のチェックボックスではなく、イメージにしたい
 つまり、オリジナルのイメージで、チェックしていない状態と、チェックした状態を実現したい
 ボタンの押されている状態と、押されていない状態のイメージを設定したいのですがどうしたらいいのか?
2.データがNULLの時は表示したくない
 chBitにはNULLが設定されることが有り、そのときはカラムを空欄にしたい
3.ヘッダをクリックされたときにソートするが、クリックするたびにデータベースを読んでしまい
 チェックボックスを変更した状態がキャンセルされてしまうので、
 この項目に関しては、ヘッダクリックのソートはデータベースの再読込ではなく、
 すでに読み込んだ状態でソートしたい

ASP.NETが、よくわかってないのでもしかしたら、簡単に実現出来てしまうのかもしれないですが・・よろしくお願いします
チェックボックスではなく、GridView上の他のコントロールで実現出来るのでしたらそちらで教えてください

ASP.Xファイル
```
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
		DataKeyNames="t1" DataSourceID="SqlDataSource1" AllowSorting="True" Height="115px" 
		onrowcreated="GridView1_RowCreated" Width="87px">
		<Columns>
			<asp:BoundField DataField="t1" HeaderText="t1" ReadOnly="True" 
				SortExpression="t1" />
			<asp:BoundField DataField="chStr" HeaderText="chStr" SortExpression="chStr" />
			<asp:BoundField DataField="ch" HeaderText="ch" SortExpression="ch" />
			<asp:CheckBoxField DataField="chBit" HeaderText="chBit" 
				SortExpression="chBit" />
		</Columns>
</asp:GridView>
	<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
		ConnectionString="<%$ ConnectionStrings:testdbConnectionString %>" 
		SelectCommand="SELECT [t1], [chStr], [ch], [chBit] FROM [tbl001]">
</asp:SqlDataSource>
```

csファイル
```
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
	if (e.Row.RowIndex >= 0) {
		var cb = (CheckBox)e.Row.Cells[3].Controls[0];
		cb.Enabled = true;
	}
}
```

データの内容(chBitはyes/no型)
```
t1|t2                     |t3 |t4                     |ch  |chStr|chBit
-----------------------------------------------------------------------
2 |適当な文字列を入れてね2|aaa|2013-04-04 17:20:09.460|1   |true |False
3 |適当な文字列を入れてね3|aaa|2013-04-04 17:20:09.460|0   |false|True
4 |適当な文字列を入れてね4|aaa|2013-04-04 17:20:09.460|NULL|true |False
5 |適当な文字列を入れてね5|aaa|2013-04-04 17:20:09.460|NULL|false|True
6 |適当な文字列を入れてね6|aaa|2013-04-04 17:20:09.463|NULL|NULL |NULL
チェックボックスはchBitに結びつけられています
```

というような、WEBフォームを作ったとき、
チェックボックスを使ってやりたいことが2種類あるのですが、なかなかできずに困っています


1.通常のチェックボックスではなく、イメージにしたい
 つまり、オリジナルのイメージで、チェックしていない状態と、チェックした状態を実現したい
 ボタンの押されている状態と、押されていない状態のイメージを設定したいのですがどうしたらいいのか?
2.データがNULLの時は表示したくない
 chBitにはNULLが設定されることが有り、そのときはカラムを空欄にしたい
3.ヘッダをクリックされたときにソートするが、クリックするたびにデータベースを読んでしまい
 チェックボックスを変更した状態がキャンセルされてしまうので、
 この項目に関しては、ヘッダクリックのソートはデータベースの再読込ではなく、
 すでに読み込んだ状態でソートしたい

ASP.NETが、よくわかってないのでもしかしたら、簡単に実現出来てしまうのかもしれないですが・・よろしくお願いします
チェックボックスではなく、GridView上の他のコントロールで実現出来るのでしたらそちらで教えてください