我已经设置了一个存储过程,它使用一个输入参数(@QuestionID
)来检索单个记录(记录来自多个数据表的元素)。
创建了一个datareader并在我的网页上使用这些值填充值。
我不知道该怎么做是设置输入参数的值,而不是点击链接的人从列表中打开“详细信息”页面(在引用页面上)。
引用页面,其中有人点击了详细信息记录并设置了QuestionID
:
<asp:GridView ID="GridView1" runat="server" Caption="Submitted Questions" AllowSorting="True"
CaptionAlign="Left" EmptyDataText="You have not submitted any Questions." PageSize="5"
AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="QuestionID" runat="server" Text='<%# Eval("QuestionID") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="KeyObjective" HeaderText="Key Objective" ItemStyle-Width="150" />
<asp:BoundField DataField="SubmitDate" HeaderText="Submitted Date" ItemStyle-Width="50" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="Details" runat="server" Text="View Details" PostBackUrl='<%# "~/Submit/Submit_Detail.aspx?Id=" + Eval("QuestionID") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="Clone" runat="server" Text="Create Clone" PostBackUrl='<%# "~/Submit/Submit_Clone.aspx?Id=" + Eval("QuestionID") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
当前硬编码为@QuestionID
值为1的DataReader控件,我需要让它接受从引用页面发送的查询字符串值:
string sConstr = ConfigurationManager.ConnectionStrings["CS1"].ConnectionString;
SqlConnection Conn = new SqlConnection(sConstr);
using (Conn)
{
SqlCommand command = new SqlCommand("QuestionDetail", Conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@QuestionID", SqlDbType.BigInt));
command.Parameters["@QuestionID"].Value = 1;
Conn.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
txt_author.Text = reader["Author"].ToString();
reader.Close();
}
答案 0 :(得分:2)
您应该能够从Request
对象中读取它,假设它与LinkButtons中提供的URL匹配(即查询字符串参数为“Id”):
command.Parameters["@QuestionID"].Value = Convert.ToInt32(Request["Id"]);
如果你的参数不同,你只需要相应地调整它。