2

我有一个 Gridview 控件,它从名为 workerID 的表中返回行。我一次返回 10 行并允许分页。我想要做的是HiddenField在 Gridview 的模板中放置一个。我想将 Gridview 控件中的值分配或绑定到HiddenField. 我要绑定的值是workerID。

然后,我希望能够将分配给 的值提交HiddenField到另一个页面,该页面具有SqlDataSource一个表单字段参数,该参数正在寻找HiddenField要传递的值。为此,我还在隐藏字段旁边的项目模板字段中放置了一个提交按钮。我的假设是提交按钮会将HiddenField每一行的值发布到我的第二个页面,以接收表单字段参数 (Hiddenfield1)。

我相信我的假设是错误的,还有更多的编码或工作需要完成。总之,我试图绑定 GridView 控件中的每一行值(workerID 的值),然后将该值发布到将接收它的另一个页面。我发现从 gridview 传递 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,将锻炼 ID 设置为按钮的 CommandArgument,并移除 PostBackURL 属性:

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

使用该 RowCommand 事件将 workerID 值填充到 Session 变量中:

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 回答