What is the correct syntax to the NavigateURL attribute of asp:HyperLink?
Error came when I used double quote characters.
(Eg:-Number of "visits accessing our community" health physiotherapy services )
<RAD:GridTemplateColumn HeaderText="KPI" DataField="DisplayName" UniqueName="KPIName" GroupByExpression="DisplayName Group By DisplayName">
<ItemTemplate>
<asp:Label Text='<%# Eval("DisplayName") %>' ID="lblKPI" runat="server" Visible="false" />
<asp:HyperLink runat="server" ID="lnkKpi" rel='<%# Eval("DisplayName") %>' Text='<%# Eval("DisplayName") %>' NavigateUrl='<%# Eval("KPIID","~/Authorised/PerformanceManagement/PerformanceManagement.aspx?Kpi={0}") %>' Target="_blank"></asp:HyperLink>
</ItemTemplate>
</RAD:GridTemplateColumn>
Result
How to handle the error ?
Use HtmlEncode for the values
Text='<%# HttpUtility.HtmlEncode(Eval("DisplayName")) %>'
Or
NavigateUrl='<%# "~/Authorised/PerformanceManagement/PerformanceManagement.aspx?Kpi=" + HttpUtility.HtmlEncode(Eval("DisplayName")) %>'
You can do it by creating a URL in the code behind file.
See Dynamically set a hyperlink control's NavigateUrl property inline.
Related
Currently my Gridview hyperlink is passing one parameter in URL as show below
<asp:HyperLink ID="hlnkREQUEST_ID" runat="server"
Text='<%# DataBinder.Eval(Container, "DataItem.REQUEST_ID") %>'
NavigateUrl='<%# "~/StudentPages/viewREQUEST_ID_page.aspx?REQUEST_ID="+DataBinder.Eval(Container, "DataItem.REQUEST_ID")%>' >
Now, in the same hyperlink I need to pass another parameter which I am adding like this:
<asp:HyperLink ID="hlnkREQUEST_ID" runat="server"
Text='<%# DataBinder.Eval(Container, "DataItem.REQUEST_ID") %>'
NavigateUrl='<%# "~/StudentPages/viewREQUEST_ID_page.aspx?REQUEST_ID="+DataBinder.Eval(Container, "DataItem.REQUEST_ID") & REQUESTER="+DataBinder.Eval(Container, "DataItem.REQUESTER")%>'>
but this is causing an error
"REQUESTER" does not exist in current context
What's wrong here?
You need to make changes:
<asp:HyperLink ID="hlnkREQUEST_ID" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.REQUEST_ID") %>' NavigateUrl='<%# "~/StudentPages/viewREQUEST_ID_page.aspx?REQUEST_ID="+DataBinder.Eval(Container, "DataItem.REQUEST_ID") + "&REQUESTER="+DataBinder.Eval(Container, "DataItem.REQUESTER")%>'>
I am getting this ~/Data/TestCopy.pdf for my Documents in the GridView but I am trying to get only the filename without the directory from SQL database. Does anyone know how to achieve this?
Thanks!
<asp:TemplateField HeaderText="Documents " SortExpression="filePath">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("filePath") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" Target="_blank" runat="server" Text='<%# Bind("filePath") %>'
NavigateUrl='<%# Eval("filePath") %>'>
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
The simplest way is, just add the Reference to System.IO and use Path class to get only the file name, little change in your code,
<asp:TemplateField HeaderText="Documents " SortExpression="filePath">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Path.GetFileName(Bind("filePath")) %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" Target="_blank" runat="server" Text='<%# Path.GetFileName(Bind("filePath")) %>'
NavigateUrl='<%# Eval("filePath") %>'>
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
In Gridview RowDataBound , evaluate filename from filepath.
System.IO.Path.GetFileName(filePath).
Not sure but you can try something like this:-
Text='<%# Eval("filePath").ToString().Split(Eval("filePath").ToString().LastIndexOf("/"))[1] %>'
May be you have stored it this way ~/Data/TestCopy.pdf in the database. You can use split function to split the last '/'
I have this aspx code:
<asp:TemplateField HeaderText="Name" SortExpression="Firmierung">
<ItemTemplate>
<asp:HyperLink ID="HyperLink" runat="server" NavigateUrl='<%#Eval("Id", "DetailInfo.aspx?Id={0}") %>' Text='<%#Bind("Name") %>' />
</ItemTemplate>
</asp:TemplateField>
I want to add an if condition so that I can use operand + with Text, something like this:
<asp:TemplateField HeaderText="Name" SortExpression="Firmierung">
<ItemTemplate>
<% if(Condition is true) { %>
<asp:HyperLink ID="HyperLink" runat="server" NavigateUrl='<%#Eval("Id", "DetailInfo.aspx?Id={0}") %>' Text='<%#Bind("Name") + ("Active") %>' />
<% } else { %>
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%#Eval("Id", "DetailInfo.aspx?Id={0}") %>' Text='<%#Bind("Name") %>' />
<% } %>
</ItemTemplate>
</asp:TemplateField>
I don't know how to use operand + in this case. Any help appreciated. Thanks!
Try this one
Text='<%# String.Format({0}{1},Eval("Name"),Eval("Active")) %>'
OR
Text='<%# String.Format({0}{1},Bind("Name"),Bind("Active")) %>'
For more help visit the link:
HyperLink with NavigateUrl with Eval(). Where is the mistake?
You can't do it with Bind. Although with Eval you can add some C# code with it, with Bind it is not possible. Eval is really a method call but Bind is just a declaration that turned by the framework to some binding code, and its format has to be Bind("FieldName") (You can add formatting though).
The Hyperlink Text property is not editable by the client so Eval should be enough and you can write it in one row.
<asp:HyperLink ID="HyperLink" runat="server"
NavigateUrl='<%#Eval("Id", "DetailInfo.aspx?Id={0}") %>'
Text='<%# Eval("Name") + (Condition ? + Eval("Active") : "") %>' />
Not able to DataBound the Style attribute
Style='<%# Eval("LeftPadding","padding-left:{0}") %>'
Full Code
<asp:TemplateField HeaderText="Report Item" SortExpression="ReportItem">
<ItemTemplate>
<asp:Label Style='<%# Eval("LeftPadding","padding-left:{0}") %>' ID="lblReportItem"
runat="server" Text='<%# Eval("Caption") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Width="350px" />
</asp:TemplateField>
But I can DataBound some other attributes even not a Standard HTML attribute, like below
<asp:Label StyleTemp='<%# Eval("LeftPadding","padding-left:{0}") %>' ID="lblReportItem"
runat="server" Text='<%# Eval("Caption") %>'></asp:Label>
What is the problem with Style ?
Got Answer :)
<asp:Label Style=<%# string.Format("padding-left:{0}px",Eval("LeftPadding")!=DBNull.Value? Convert.ToString(Eval("LeftPadding")): "0") %>
ID="lblReportItem" runat="server" Text='<%# Eval("Caption") %>'></asp:Label>
Tried by without giving the Single Quotes for the style attribute and used string.Format
Style=<%# string.Format("padding-left:{0}px",Eval("LeftPadding")!=DBNull.Value? Convert.ToString(Eval("LeftPadding")): "0") %>
I have a bound field in my Gridview which is getting its value from a database table.
I have got the data but don't know how to format it inside the gridview.
For example I get total data from below like "123456", but I want to display as "123,456"
<asp:BoundField DataField="totaldata" HeaderText="Total Data"
ReadOnly="True" SortExpression="totaldata" />
How can I do this? Do I need to convert the bound field into a template field ? But what do i do after that.
please help.
I have used DataFormatString="{0:n0}" and it solved the above problem.
how do i do for this:
<asp:TemplateField HeaderText="Failed Files"
SortExpression="NumFailed">
<ItemTemplate>
<asp:Image ID="Image2" runat="server" ImageUrl="~/NewFolder1/warning_16x16.gif" />
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "GetFilesFailed.aspx?id="+Eval("MachineID") %>' Text='<%# Bind("NumFailedFiles") %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
the hyperlink has the number which need to be formatted...
Use DataFormat property :
<asp:BoundField DataField="totaldata" HeaderText="Total Data"
ReadOnly="True" SortExpression="totaldata" DataFormatString="{0:n3}" />
EDIT : For the second part of your question use Eval method's second parameter to format your data :
<%# Eval("NumFailedFiles", "{0:n3}") %>
Then your template will be like that :
<asp:TemplateField HeaderText="Failed Files"
SortExpression="NumFailed">
<ItemTemplate>
<asp:Image ID="Image2" runat="server"
ImageUrl="~/NewFolder1/warning_16x16.gif" />
<asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl='<%# "GetFilesFailed.aspx?id="+Eval("MachineID") %>'
Text='<%# Eval("NumFailedFiles", "{0:n3}") %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
A couple of ways in how you can do that
Option 1
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "GetFilesFailed.aspx?id="+Eval("MachineID") %>' Text='<%# Bind("NumFailedFiles","{0:n0}") %>'></asp:HyperLink>
Option 2
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "GetFilesFailed.aspx? id="+Eval("MachineID") %>' Text='<%# Bind("NumFailedFiles").ToString("N") %>'></asp:HyperLink>
Option 3
Create a method in the code behind page that returns the formatted number.
protected string GetFormatedNumber(object number)
{
if ( number != null )
{
return number.ToString("N");
}
return "0";
}
And call the method in your aspx page as below:
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "GetFilesFailed.aspx? id="+Eval("MachineID") %>' Text='<%#GetFormatedNumber(Eval("NumFailedFiles")) %>'></asp:HyperLink>
I think you need to take a look at this MSDN article on How to Format Data in the DataGridView
if you want to format your data on gridview use "{0:n3}"
<asp:Label ID="label" runat="server" Visible="true" Text='<%#DataBinder.Eval(Container.DataItem, "data","{0:n3}") %>'></asp:Label>