Hi yafadi,
You have to use TemplateField. If you want more condition then you need to use OnRowDataBound event.
Check this example. Now please take its reference and correct your code.
HTML
C#
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:TemplateField HeaderText="Country">
<ItemTemplate>
<asp:HyperLink runat="server" Text='<%# Eval("Country") %>'
NavigateUrl='<%# Eval("Country").ToString() == "USA"
? "Home.aspx?Country=" + Eval("Country")
: "Default.aspx?Country=" + Eval("Country") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
VB.Net
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:TemplateField HeaderText="Country">
<ItemTemplate>
<asp:HyperLink runat="server" Text='<%# Eval("Country") %>'
NavigateUrl='<%# If(Eval("Country").ToString() = "USA",
"Home.aspx?Country=" + Eval("Country"),
"Default.aspx?Country=" + Eval("Country")) %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.AddRange(new System.Data.DataColumn[3] {
new System.Data.DataColumn("Id"),
new System.Data.DataColumn("Name"),
new System.Data.DataColumn("Country") });
dt.Rows.Add(1, "John", "USA");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne", "USA");
dt.Rows.Add(4, "Robert", "USA");
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
Dim dt As Data.DataTable = New Data.DataTable()
dt.Columns.AddRange(New Data.DataColumn(2) {
New Data.DataColumn("Id"),
New Data.DataColumn("Name"),
New Data.DataColumn("Country")})
dt.Rows.Add(1, "John", "USA")
dt.Rows.Add(2, "Mudassar Khan", "India")
dt.Rows.Add(3, "Suzanne", "USA")
dt.Rows.Add(4, "Robert", "USA")
GridView1.DataSource = dt
GridView1.DataBind()
End If
End Sub
Screenshot