Hi yinyang205,
Since you are passing Encoded value as QueryString parameter. So inorder to filter the record you need to pass Decoded QueryString value to the SqlDataSource SelectParameters. For this you have to take a hiddenfield and assign value to hiddenfield on page load and pass the ControlParameter to the SqlDataSource SelectParameters instead of QueryStringParameter.
Refer the below sample.
CS.aspx
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" />
<asp:BoundField DataField="CompanyName" HeaderText="Company Name" />
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink ID="Details1" Text="Details" runat="server" NavigateUrl='<%# string.Format("~/CustomerDetails.aspx?CompanyName={0}", HttpUtility.UrlEncode(Eval("CompanyName").ToString())) %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
CS.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("Id", typeof(int)), new DataColumn("CompanyName", typeof(string)) });
dt.Rows.Add(1, "Company A - 12");
dt.Rows.Add(2, "Company B");
dt.Rows.Add(3, "Company C 12-33");
dt.Rows.Add(3, "B's Beverages");
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
CustomerDetails.aspx
<asp:HiddenField ID="hfQueryValue" runat="server" />
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataSourceID="SqlDataSource1"
DataKeyNames="CustomerID">
<Fields>
<asp:BoundField DataField="CustomerID" HeaderText="CustomerID" ReadOnly="True" SortExpression="CustomerID" />
<asp:BoundField DataField="CompanyName" HeaderText="CompanyName" SortExpression="CompanyName" />
</Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:constr %>"
SelectCommand="SELECT [CustomerID], [CompanyName] FROM [Customers] WHERE ([CompanyName] = @CompanyName)">
<SelectParameters>
<asp:ControlParameter ControlID="hfQueryValue" Name="CompanyName" PropertyName="Value"
Type="String" />
</SelectParameters>
</asp:SqlDataSource>
CustomerDetails.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Request.QueryString["CompanyName"]))
{
hfQueryValue.Value = HttpUtility.UrlDecode(Request.QueryString["CompanyName"]);
}
}