2013-08-01 17 views
1

我有一个Gridview控件,该控件从名为workerID的表中返回行。我一次返回10行并允许分页。我想要做的是将一个HiddenField放置在Gridview中的模板中。我想将Gridview控件的值分配或绑定到HiddenField。我想要绑定的值是workerID。将Gridview行值分配给模板中的隐藏字段。使用按钮将隐藏的字段值发布到另一页

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

我相信我的假设是错误的,还有一些编码或工作需要完成。总之,我试图绑定GridView控件中的每一行值(workerID的值),然后将该值发布到另一个将接收它的页面。我发现很容易从gridview传递一个url值,但在这种情况下,传递一个url查询字符串不是一个选项。

页1 - 随着hiddenfield:

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

回答

0

怎么样不同的方法?处理您的第一页上的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" />