我有一个Gridview控件,它从名为workerID的表中返回行。我一次返回10行并允许分页。我想要做的是在Gridview中的模板中放置HiddenField
。我想将Gridview控件中的值赋值或绑定到HiddenField
。我想绑定的值是workerID。
然后我希望能够将分配给HiddenField
的值提交给另一个页面,该页面的SqlDataSource
具有一个formfield参数,该参数正在查找HiddenField
的值被通过。为此,我还在隐藏字段旁边的项目模板字段中放置了一个提交按钮。我的假设是提交按钮会将每行的HiddenField
值发布到我的第二页,以便接收formfield参数(Hiddenfield1)。
我认为我的假设是错误的,还有一些需要完成的编码或工作。总之,我试图绑定GridView控件中的每个行值(workerID的值),然后将该值发布到另一个将接收它的页面。我发现从gridview传递url值很容易,但在这种情况下,传递url querystring不是一个选项。
第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>
答案 0 :(得分: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值填充到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" />