2

workerID というテーブルから行を返す Gridview コントロールがあります。一度に 10 行を返し、ページングを許可します。私がやりたいことはHiddenField、Gridview 内のテンプレートに配置することです。Gridview コントロールから に値を割り当てるかバインドしたいと考えていHiddenFieldます。バインドしたい値は workerID です。

次に、渡される値を探しているフォームフィールドパラメータをHiddenField持つ別のページに、に割り当てられた値を送信できるようにしたいと考えています。これを行うために、非表示フィールドの横にあるアイテム テンプレート フィールドにも送信ボタンを配置します。私の仮定では、送信ボタンは各行の値を 2 番目のページに投稿して、フォームフィールド パラメーター (Hiddenfield1) を受け取ることになると想定しています。SqlDataSourceHiddenFieldHiddenField

私の仮定は間違っていると思います。さらにコーディングや作業が必要です。要約すると、GridView コントロール (workerID の値) の各行の値をバインドし、その値を受け取る別のページに投稿しようとしています。グリッドビューから URL 値を渡すのは簡単ですが、この場合、URL クエリ文字列を渡すことはオプションではありません。

ページ 1 - 隠しフィールドを使用:

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="workoutID" DataSourceID="SqlDataSource5">
    <Columns>
        <asp:BoundField DataField="workoutID" HeaderText="workoutID" InsertVisible="False" ReadOnly="True" SortExpression="workoutID" />
        <asp:BoundField DataField="workoutTitle" HeaderText="workoutTitle" SortExpression="workoutTitle" />
        <asp:BoundField DataField="UserID" HeaderText="UserID" SortExpression="UserID" />
        <asp:BoundField DataField="description" HeaderText="description" SortExpression="description" />
        <asp:BoundField DataField="exercisenotes" HeaderText="exercisenotes" SortExpression="exercisenotes" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("workoutID") %>' />
                <asp:Button ID="Button1" runat="server" PostBackUrl="~/postfromgridview.aspx" Text="Button" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

ページ 2 - SQLdatasource および formfield パラメータを使用:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="workoutID" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:BoundField DataField="workoutID" HeaderText="workoutID" InsertVisible="False" ReadOnly="True" SortExpression="workoutID" />
        <asp:BoundField DataField="workoutTitle" HeaderText="workoutTitle" SortExpression="workoutTitle" />
        <asp:BoundField DataField="UserID" HeaderText="UserID" SortExpression="UserID" />
        <asp:BoundField DataField="description" HeaderText="description" SortExpression="description" />
    </Columns>
</asp:GridView>
</td>
<td>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ 

    ConnectionStrings:SQL2008R2_504887_golivefitnesConnectionString %>" SelectCommand="workout_testing" SelectCommandType="StoredProcedure">
        <SelectParameters>
            <asp:FormParameter FormField="Hiddenfield1" Name="workoutID" Type="Int32" />
        </SelectParameters>
    </asp:SqlDataSource>
4

1 に答える 1

1

別のアプローチはどうですか?最初のページで GridView の RowCommand イベントを処理します。

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="workoutID" DataSourceID="SqlDataSource5"
    OnRowCommand="GridView2_RowCommand">

HiddenField を削除し、workoutID をボタンの CommandArgument として設定し、PostBackURL 属性を削除します。

<asp:Button ID="Button1" runat="server" Text="Button"
    CommandArgument='<%# Eval("workoutID") %>' />

その RowCommand イベントを使用して、workerID 値をセッション変数に詰め込みます。

protected void GridView2_RowCommand(Object sender, GridViewCommandEventArgs e)
{
    int workoutID = int.Parse(e.CommandArgument.ToString());
    Session["selectedWorkoutID"] = workoutID;
}

次に、別のページで、その FormParameter を SessionParameter に変更します。

<asp:SessionParameter Name="workoutID" SessionField="selectedWorkoutID" 
    Type="Int32" />
于 2014-01-06T17:54:26.357 に答える