HyperLinkField and OnRowDataBound

W

Walter Wang [MSFT]

Hi David,

DataControlField (HyperLinkField inherits from DataControlField) is an
abstract class that inherits directly from System.Object. It's not a normal
server control, therefore it doesn't have an ID property.

To access it in OnRowDataBound, you have to use the column index:

protected void GridView1_RowDataBound(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataControlFieldCell dcfc = e.Row.Cells[2] as
DataControlFieldCell;
HyperLinkField hlf = dcfc.ContainingField as HyperLinkField;
hlf.Text = "Test";
hlf.NavigateUrl = "about:blank";
}
}

Let me know if this answered your question. Also, as I mentioned in your
another post, you can find more info about DataControlField here:

#Cutting Edge: Custom Data Control Fields -- MSDN Magazine, January 2006
http://msdn.microsoft.com/msdnmag/issues/06/01/CuttingEdge/
DataControlField is an abstract class that inherits directly from
System.Object. It implements the IStateManager interface.

Sincerely,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications. If you are using Outlook Express, please make sure you clear the
check box "Tools/Options/Read: Get 300 headers at a time" to see your reply
promptly.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 
D

David Thielen

Hi;

This gets me closer. What I need to do is disable the link and change the
image. And I need this for both ButtonField (Image type) and HyperLinkField.
There does not seem to be a clean way inside controls I create that inherit
from those classes to then disable the control written to the page.

--
thanks - dave
david_at_windward_dot_net
http://www.windwardreports.com

Cubicle Wars - http://www.windwardreports.com/film.htm




Walter Wang said:
Hi David,

DataControlField (HyperLinkField inherits from DataControlField) is an
abstract class that inherits directly from System.Object. It's not a normal
server control, therefore it doesn't have an ID property.

To access it in OnRowDataBound, you have to use the column index:

protected void GridView1_RowDataBound(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataControlFieldCell dcfc = e.Row.Cells[2] as
DataControlFieldCell;
HyperLinkField hlf = dcfc.ContainingField as HyperLinkField;
hlf.Text = "Test";
hlf.NavigateUrl = "about:blank";
}
}

Let me know if this answered your question. Also, as I mentioned in your
another post, you can find more info about DataControlField here:

#Cutting Edge: Custom Data Control Fields -- MSDN Magazine, January 2006
http://msdn.microsoft.com/msdnmag/issues/06/01/CuttingEdge/
DataControlField is an abstract class that inherits directly from
System.Object. It implements the IStateManager interface.

Sincerely,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications. If you are using Outlook Express, please make sure you clear the
check box "Tools/Options/Read: Get 300 headers at a time" to see your reply
promptly.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 
W

Walter Wang [MSFT]

Hi David,

I understand that you want to disable the HyperLink inside the
HyperLinkField. HyperLink inherits from WebControl which has a property
named "Enabled", when set to false, it will display a visual greyed output
to let the user know it's disabled.

Unfortunately HyperLinkField doesn't expose the HyperLink inside it. You
will have to use other workarounds.

First workaround is which I recommended: you can use the TemplateField
approach which let you have you full control of the controls inside it. You
can use a HyperLink there and set its Enabled property by demand.

I also understands that you already have existing code work with
DataControlField, you could use second workaround:

protected void GridView1_RowDataBound(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataControlFieldCell dcfc = e.Row.Cells[2] as
DataControlFieldCell;
HyperLinkField hlf = dcfc.ContainingField as HyperLinkField;
hlf.Text = "Test";
hlf.NavigateUrl = "about:blank";
(dcfc.Controls[0] as HyperLink).Enabled = false;
}
}

Please note we're using undocumented index 0 to access the HyperLink, this
might be changed in other versions of ASP.NET without notice.

Third workaround is to create your own HyperLinkField and expose the
internal HyperLink control.

Let me know what do you think of these approaches.

Regards,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top