1

データベースに最終的にコミットする前に、アップロードされたスプレッドシートを編集できるように cfGrid を使用するように依頼されました。CF 5/6 の頃には cfGrid に精通していましたが、最近は使用していません。したがって、単にデータを誤解している可能性があります。

私のグリッド呼び出しは次のとおりです。

    <cfgrid name="uGrid"
        format="html" 
        query="xlsData"
        title="Edit Uploaded Data" 
        striperows="yes"
        selectmode="edit"
        delete="yes">
            <cfgridcolumn name="queryRowNum" display="true" />
            <cfloop list="#replace(form.columnList, " ", "", "All")#" index="i">
                <cfgridcolumn name="#i#" header="#i#" width="200" select="Yes" />
            </cfloop>
   </cfgrid>

グリッドに正しく表示される次のデータをアップロードします。

    QueryRowNum profileID   speakingDate
    1   1   1/1/2014
    2   2   1/15/2014
    3   3   3/7/2014
    4   5   5/9/2014
    5   6   11/8/2014

1 行目のデータを 2014 年 1 月 10 日に変更し、3 行目の日付を 2014 年 3 月 17 日に変更して、グリッドを送信します。次のページでは、フォーム スコープをダンプして、cfGrid が何を渡しているかを確認します。渡された配列を調べて更新を行う予定です。これは、フォーム スコープに表示されるものです。

    UGRID.QUERYROWNUM   
    array
    1   3
    2   4
    UGRID.ROWSTATUS.ACTION  
    array
    1   U
    2   U
    UGRID.SPEAKINGDATE  
    array
    1   1/10/14
    2   3/17/14

代わりにこれを期待します:

    UGRID.QUERYROWNUM   
    array
    1   1
    2   3
    UGRID.ROWSTATUS.ACTION  
    array
    1   U
    2   U
    UGRID.SPEAKINGDATE  
    array
    1   1/10/14
    2   3/17/14

(ドキュメントに基づく)私の期待は、変更された行にはその行全体が渡されるということです。次に、「queryRowNum」配列を使用して、新しいデータで更新する必要があるクエリ行を知ることができます。最初の行と 3 番目の行を更新し、それらの queryRowNum がそれぞれ 1 と 3 であるため、uGrid.QueryRowNum 配列でそれを期待していました。

この仮定は間違っていますか?その場合、更新するクエリ行をどのように知ることができますか?

このサーバーは CF9 を実行していると思います。

編集

奇妙なことに、送信ボタンをクリックしたときに選択したセルに基づいて、変更されていない列に渡されるものを変更できることに気付きました。最初の行で変更した列を選択してフォームを送信すると、すべてが正しく機能します。

4

1 に答える 1

0

私もこの奇妙な行動に気づきました。「html」形式の解決策が見つかりませんでした。私が使用した回避策は「フラッシュ」形式です。HTML から Flash への 1 つの変更で、すべての正しいデータが送信されます。

<cfif isdefined('form.submit')>
    <cfdump ="#form1#">
    <cfgridupdate grid = "uGrid" dataSource = "#DSN" tableName = "#tablename#" keyOnly="true"  >
</cfif>

<cfquery name="xlsData">    
</cfquery>

<cfform name="form1" action="#cgi.script_name#" format="flash" method="post">

<cfgrid name="uGrid"
            format="flash" 
            query="xlsData"
            title="Edit Uploaded Data" 
            striperows="yes"
            selectmode="edit"
            delete="yes">

            <cfgridcolumn name="queryRowNum" display="true" />
            <cfloop list="#replace(form.columnList, " ", "", "All")#" index="i">
                    <cfgridcolumn name="#i#" header="#i#" width="200" select="Yes" />
            </cfloop>
    </cfgrid>
    <cfinput name="submit" type="Submit" value="Save All Changes">
</cfform>
于 2015-02-20T17:58:39.170 に答える