出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

[2539] Re:アルゴリズム?
投稿者:ぽんぽんさん 2002/08/24 10:30:48
早速のご回答ありがとうございます。
質問内容がわかりにくく、申し訳ありません。

> >チェックされている案件の申請書番号をhiddenに書き込み、
> >チェックされていない場合は「""」を書き込むようにしています。
> >ただし、並び替えが発生した場合は、書き込むインデックスが同じなためか、
> >上手く処理されません。
>  
> 現状は、
>  
> 「hidden の Name に ASPが作る連番を与え、
> チェックされたら hidden の Value に申請書番号を書込む。
> チェック状態は sessionに保持する。」
>  
> と読めますが、これだと途中でソートされたら確かにメチャクチャになるので、
>  
> 「全hidden の Name にユニークな値(ex.申請書番号)を与え、
> チェックされたら hidden の Value に "checked" を書込む。
> session変数にもユニークな名前を与える。」
>  
> ならどうでしょう。

現状、下記の処理を想定してみました。
如何でしょうか?

----------------------------------------------------
■gv_workList(n1, n2)
n1:レコード件数分
n2:指定列情報

■DAT_WORKID = 申請書番号の格納されている列番号

<%
'@ 初期表示
If "" = gv_reload_type or true = isNull(gv_reload_type) then
'@ 初期起動時、デフォルトはすべての案件がチェック済みとするため、
セッションに情報を格納する。
For ic = 1 To gv_workNum
Session("GWSV_SELECT_WORKID") = Session("GWSV_SELECT_WORKID") & _
gv_workList(ic, DAT_WORKID) & ","
Next
'@ ページ切り替え等
ElseIf false = gv_reload_type Then
Session("GWSV_SELECT_WORKID") = ""
For ic = 1 To gv_workNum
If Request.Form("id_" & gv_workList(ic, DAT_WORKID)) = "cheked" Then
Session("GWSV_SELECT_WORKID") = Session("GWSV_SELECT_WORKID") & _
gv_workList(ic, DAT_WORKID) & ","
End If
Next
'@ 案件開封後から復帰した場合
ElseIf true = gv_reload_type Then
現状処理なし
End If

'@--- hidden情報作成 START

Dim aryWorkID

aryWorkID = Split(Session("GWSV_SELECT_WORKID"), ",")

For ic = 1 To gv_workNum
bFlg = false
For ix = 0 To UBound(arySelectWork)
If gv_workList(ic, DAT_WORKID) = arySelectWork(ix) Then
bFlg = true
Exit For
End If
If bFlg = true Then
%><input type="hidden" name="id_<%= gv_workList(ic, DAT_WORKID) >" value="cheked"><%
Else
%><input type="hidden" name="id_<%= gv_workList(ic, DAT_WORKID) >" value=""><%
End If
Next
Next
'@--- hidden情報作成 END

.
.
.

'@--- 一覧表示 START
For ic = start To end
PutCheckBox( ic, gv_workList(ic, DAT_WORKID)
Next
'@--- 一覧表示 END


'@--- 関数PutCheckBox() START
Sub PutCheckBox( arg_Idx, arg_WorkID )
Dim aryWorkID

For ic = 1 To gv_workNum
bFlg = false
aryWorkID = Split(Session("GWSV_SELECT_WORKID"), ",")
For ix = 0 To UBound(aryWorkID)
If arg_WorkID = aryWorkID(ix) Then
bFlg = true
Exit For
End If
Next
If bFlg = true Then
%><INPUT TYPE="checkbox" NAME="chkSelectWork<%=arg_Idx%>" cheked><%
Else
%><INPUT TYPE="checkbox" NAME="chkSelectWork<%=arg_Idx%>"><%
End If
Next
End Sub
'@--- 関数PutCheckBox() END
----------------------------------------------------

尚、上記処理中(gv_workList)に情報がはいる形となっていますが、
一覧表示する度に情報が増えた(または減少)した場合も対応しなければなりません。
減る場合については特に問題ないのですが、
増えた場合については、その増えた申請書番号はチェックされた状態でなければなりません。

よろしくお願いします。

画面状態の保持について   ぽんぽんさん [2002/08/24 2:37:32] [2536]
  Re:画面状態の保持について   とこおかさん [2002/08/24 6:27:01] [2537]
    Re:画面状態の保持について   ぽんぽんさん [2002/08/24 10:34:12] [2540]
  アルゴリズム?   北岳さん [2002/08/24 6:57:48] [2538]
    Re:アルゴリズム?   ぽんぽんさん [2002/08/24 10:30:48] [2539]


TreeBBS For ASP V.0.1.3
Program By YasNet