Home All Groups Group Topic Archive Search About

HyperLinkField and OnRowDataBound

Author
30 Oct 2006 5:43 AM
David Thielen
Hi;

How can I access a HyperLinkField in a GridView in the OnRowDataBound call?
Looking at what is passed in it looks like at that point all that exists is
the HyperLink control that HyperLinkField creates.

Also very weird that there is no ID="name" attribute for HyperLinkField.

Any ideas?

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

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

Author
30 Oct 2006 8:21 AM
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 (waw***@online.microsoft.com, 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.
Author
30 Oct 2006 5:48 PM
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




Show quoteHide quote
"Walter Wang [MSFT]" wrote:

> 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 (waw***@online.microsoft.com, 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.
>
>
Author
31 Oct 2006 5:47 AM
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 (waw***@online.microsoft.com, 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.
Author
31 Oct 2006 3:40 PM
David Thielen
ok - thanks
--
thanks - dave
david_at_windward_dot_net
http://www.windwardreports.com

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




Show quoteHide quote
"Walter Wang [MSFT]" wrote:

> 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 (waw***@online.microsoft.com, 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.
>
>
Author
29 Jan 2007 11:10 AM
Paolo
Hi,
this works very well, but if I try to do a thing like this:

protected void grv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
          .................................
          .................................

           if (something)
            {
                hlf.DataNavigateUrlFormatString = "Page.aspx?ID={0}";
              }
            else
            {
                hlf.DataNavigateUrlFormatString = "Print/Page.aspx?ID={0}";
             }
}

I have some problems...
The row affected is the next one.

Where is the error?

Thanks you.

Paolo


From http://developmentnow.com/g/15_2006_10_0_0_841507/HyperLinkField-and-OnRowDataBound.htm Posted via DevelopmentNow.com Groups http://www.developmentnow.com