アプリ版:「スタンプのみでお礼する」機能のリリースについて

ASP.net(VB)とSQLSERVERで開発しているのですが、SQLSERVERでストアドプロシージャでSELECT文を発行するSQLを書きました。

1)そのデータをGridViewで表示したのですが、列がNULLの場合にチェックボックスを表示したい。←これが分からない
2)チェックボックスがonの状態で実行ボタンが押下された場合に別のストアドプロシージャを走らせてNULLを「確認済」としたい。

(例)
チェック   |名前 |メールアドレス
確認済    |Aさん|aaaa@test.co.jp
□(チェックボックス) |Bさん|bbbb@test.co.jp

[実行ボタン]

このようにこのようなことはGridViewで可能なのでしょうか?
それとも、HTMLコントロールを使用して一行ずつ書きこんでいくしかないのでしょうか?
返答をお待ちしております。

A 回答 (1件)

実際やったわけではないですが、可能だと思います。



ただ「確認済」表示列とチェックボックス列を分けた方が簡単なのではないでしょうか?

さて、やり方としては、チェックボックスが含まれる列は、全行とにかくチェックボックスが表示されるようにデザインします。
実行時に、行の描画イベント(RowDataBoundイベント)の中で、値が NULL でなければ、CheckBox を削除/非表示するようにし、代わりに"確認済"と表示する Literal コントロールでも追加してやればよいんじゃないかと思います。

この回答への補足

申し訳ありません、TmpCntStrの箇所をGridCheckにすればよかったのですね。
投稿する前に試したのですが、なぜかうまく動かなかったので思わず書き込んでしまいました。(なんでだろう…)

ついでと言いますか、TmpCntStrはうまく表示できた時にソースの表示で作成されたものを見た結果だったりします。

このような若造にお付き合い頂きありがとうございました。

補足日時:2008/08/28 17:08
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。

実際にやってみたのですがチェックボックスのコントロールがうまくとれず、つまずいてしまいました。
(エラー:オブジェクト参照がオブジェクト インスタンスに設定されていません。)
[Default.aspx]
<columns>
<asp:boundfield datafield="No." headertext="No." FooterText="処理済"/>
<asp:TemplateField HeaderText="処理済">
<ItemTemplate>
<asp:CheckBox ID="GridCheck" runat="server" />
<asp:Label ID="GridCheckLabel" runat="server" Text="済"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:boundfield datafield="処理済flg" HeaderText="処理済flg"/>
<asp:boundfield datafield="名前" headertext="名前"/>
<asp:boundfield datafield="メールアドレス" headertext="メールアドレス"/>
</columns>


[Default.aspx.vb]
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
Dim RowCnt As Integer
Dim TmpCnt As String
Dim TmpCntStr As String
Dim GridRow As GridViewRow
RowCnt = GridView1.Rows.Count
If RowCnt > 0 Then
GridRow = GridView1.Rows(RowCnt - 1) 'タイミングが新しい行の挿入なので前行を編集する
If GridRow.Cells(2).Text = "&nbsp;" Then '確認済flgがNULLの場合&nbsp;が挿入される
TmpCnt = "00" + CStr(RowCnt + 1) 'CheckBoxのIDが変更されるためIDを合わせる
TmpCnt = Right(TmpCnt, 2)
TmpCntStr = "GridView1_ctl" + TmpCnt + "_GridCheck"
'GridRow.Cells(1).FindControl(TmpCntStr).Visible = False 'ここでエラー
'GridRow.Cells(1).FindControl.(TmpCntStr).Visible = False
End If
End If
End Sub

よろしければご指導をお願いできませんでしょうか?

お礼日時:2008/08/28 16:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!