This is a migrated thread and some comments may be shown as answers.

[Solved] Bind HyperlinkButton in GridViewDynamicHyperlink and open child window

5 Answers 258 Views
GridView
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Gaurang
Top achievements
Rank 1
Gaurang asked on 12 Aug 2011, 11:33 AM
Hi Everybody,

I am developing silverlight Application. In that I use Telerik Silverlight RadGrid contorls. I develope a cutome gridview in that now I want to bind 

GridViewDynamicHyperlinkColumn

or

GridViewHyperlinkColumn


runtime for that I create one DataTamplate with HyperlinkButton/Hyperlink and bind it into GridView at runtime in Autogenerate event. But my problem is that child window is not open and if try to change somethink it give me catastrophy error.

<Grid.Resources>
                            <telerikcontrols:GridViewHyperlinkColumn x:Name="GridViewHyperLinkColumnTemplet">
                                    <telerikcontrols:GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <HyperlinkButton x:Name="HyperLink" Click="HyperLink_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
                                        </DataTemplate>
                                    </telerikcontrols:GridViewColumn.CellTemplate>
                            </telerikcontrols:GridViewHyperlinkColumn>
                            <telerikcontrols:GridViewDynamicHyperlinkColumn x:Name="GridViewDynamicHyperlinkColumnTemplet">
                                <telerikcontrols:GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <HyperlinkButton x:Name="HyperLinkButton" Click="HyperLinkButton_Click"  HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
                                    </DataTemplate>
                                </telerikcontrols:GridViewColumn.CellTemplate>
                            </telerikcontrols:GridViewDynamicHyperlinkColumn>
</Grid.Resources>
---------------------------------------------------------------------------------------------------------
  
private void HyperLinkButton_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(e.ToString()); or displya child window with some calculation.
        }
---------------------------------------------------------------------------------------------------------
  
private void grid_AutoGeneratingColumn(object sender, GridViewAutoGeneratingColumnEventArgs e)
        {
            if (e.Column.UniqueName == "xyz")
            {
GridViewDynamicHyperlinkColumnTemplet = new GridViewDynamicHyperlinkColumn();
                GridViewDynamicHyperlinkColumnTemplet.Header = e.Column.Header;
                //GridViewDynamicHyperlinkColumnTemplet.DataMemberBinding = new System.Windows.Data.Binding() { Path = new PropertyPath(hrplbtn) };
            //GridViewDynamicHyperlinkColumnTemplet.NavigateUrlFormatString = "http://www.google.com/search?q={0}+{1}";
            // GridViewDynamicHyperlinkColumnTemplet.NavigateUrlMemberPaths = "Subject, Status";
                GridViewDynamicHyperlinkColumnTemplet.UniqueName = "Account";
                GridViewDynamicHyperlinkColumnTemplet.DisplayIndex = grid.Columns.Count;
                e.Column = GridViewDynamicHyperlinkColumnTemplet;
            }
            else
            {
                e.Cancel = true;
            }
     }

Now, It is heplfull to resolve this issue. Please reply me.

Thanking you.......................
Gaurang

5 Answers, 1 is accepted

Sort by
0
Rossen Hristov
Telerik team
answered on 12 Aug 2011, 11:41 AM
Hello Gaurang,

Please, send us a sample project that reproduces the catastrophy error.

Kind regards,
Ross
the Telerik team

Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>

0
Gaurang
Top achievements
Rank 1
answered on 12 Aug 2011, 01:06 PM
Hi Ross,

Could you please provid me a sample code which contain Custome Grid and there is a hyperlink_click event open a new child form.
It is helpfull for me.

Thanks,
Gaurang
0
Rossen Hristov
Telerik team
answered on 12 Aug 2011, 01:17 PM
Hello Gaurang,

You can check our online example which has a hyperlink column and take a look at the documentation.

I hope this helps.

Greetings,
Ross
the Telerik team

Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>

0
Gaurang
Top achievements
Rank 1
answered on 12 Aug 2011, 02:38 PM
Hello Ross,

Thanks for your reply.
I have already seen this link but it is not that much helpfull. Because I want to add a GridViewDynamicHyperlinkColumn run time which content a HyperlinkButton.

For that I have create one GridViewDynamicHyperlinkColumn with datatemplate in grid resources. Then replace (bind) it to my current custome grid in AutoGeneratingColumn event.
private void grid_AutoGeneratingColumn(object sender, GridViewAutoGeneratingColumnEventArgs e)
        {
            if (e.Column.UniqueName == "abc" || e.Column.UniqueName == "xyz")
            {
                GridViewDynamicHyperlinkColumn linkColumn = new GridViewDynamicHyperlinkColumn();
                linkColumn.CellStyle = GridViewDataColumnHyperLinkButton.CellStyle; // this is ok now working
                linkColumn.DataMemberBinding = (e.Column as Telerik.Windows.Controls.GridViewBoundColumnBase).DataMemberBinding;
                linkColumn.Header = e.Column.Header;
                if (e.Column.UniqueName == "abc")
                {
                    linkColumn.UniqueName = "Account";
                }
                if (e.Column.UniqueName == "xyz")
                {
                    linkColumn.UniqueName = "FullName";
                }
                linkColumn.DisplayIndex = grid.Columns.Count;
 
                e.Column = linkColumn;
            }
            else
            {
                e.Cancel = true;
            }
        }

Now my
HyperLinkButton_Click function is call but I want to bind Hyperlink Content run time how to do this and apply current cellsyle because now my cell style is changed which I do not want.

Thanks,
Gaurang
0
Gaurang
Top achievements
Rank 1
answered on 16 Aug 2011, 11:44 AM
Hi All,

I have solve my problem this way.

private void AutoGeneratingColumnFunction(object sender, GridViewAutoGeneratingColumnEventArgs e, int count) // here count is total number of columns of the gridview
        {
            if (e.Column.UniqueName == "abc" || e.Column.UniqueName == "xyz")
            {
                GridViewDynamicHyperlinkColumn linkColumn = new GridViewDynamicHyperlinkColumn();
 
                if (e.Column.UniqueName == "abc")
                {
                    linkColumn.CellStyle = GridViewDataColumnHyperLinkButtonAccount.CellStyle; // this is data template
                    linkColumn.UniqueName = "Account";
                }
                else if (e.Column.UniqueName == "xyz")
                {
                    linkColumn.CellStyle = GridViewDataColumnHyperLinkButtonContact.CellStyle; // this is data template
                    linkColumn.UniqueName = "FullName";
                }
 
                linkColumn.DataMemberBinding = (e.Column as Telerik.Windows.Controls.GridViewBoundColumnBase).DataMemberBinding;
                linkColumn.Header = e.Column.Header;
                linkColumn.IsResizable = true;
                linkColumn.DisplayIndex = count;
 
                e.Column = linkColumn;
            }
            else
            {
                e.Cancel = true;
            }
        }

Below is my Data Template

<telerikcontrols:GridViewDynamicHyperlinkColumn x:Name="GridViewDataColumnHyperLinkButtonAccount" IsReadOnly="True">
<telerikcontrols:GridViewDynamicHyperlinkColumn.CellStyle>
<Style TargetType="telerikcontrols:GridViewCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="telerikcontrols:GridViewCell">
<Border Width="Auto" BorderThickness="1,1,1,1" CornerRadius="3,3,3,3">
<HyperlinkButton x:Name="hlbAccount" HorizontalContentAlignment="Left" Content="{Binding Account}"
VerticalContentAlignment="Center" Foreground="Blue" NavigateUri="{Binding AccountID}"
TargetName="_blank" Click="hlbAccount_Click" Width="Auto" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</telerikcontrols:GridViewDynamicHyperlinkColumn.CellStyle>
</telerikcontrols:GridViewDynamicHyperlinkColumn>
<telerikcontrols:GridViewDynamicHyperlinkColumn x:Name="GridViewDataColumnHyperLinkButtonContact" IsReadOnly="True">
<telerikcontrols:GridViewDynamicHyperlinkColumn.CellStyle>
<Style TargetType="telerikcontrols:GridViewCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="telerikcontrols:GridViewCell">
<Border Width="Auto" BorderThickness="1,1,1,1" CornerRadius="3,3,3,3">
<HyperlinkButton x:Name="hlbContact" HorizontalContentAlignment="Left" Content="{Binding Contact}"
VerticalContentAlignment="Stretch" Foreground="Blue" NavigateUri="{Binding ContactID}"
TargetName="_blank" Click="hlbContact_Click" Width="Auto"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</telerikcontrols:GridViewDynamicHyperlinkColumn.CellStyle>
</telerikcontrols:GridViewDynamicHyperlinkColumn>

Hyperlink click event
private void hlbAccount_Click(object sender, RoutedEventArgs e)
{
    GridViewRow parentRow = ((HyperlinkButton)sender).ParentOfType<GridViewRow>();
    if (((HyperlinkButton)sender).Content != null)
    {
        if (string.IsNullOrEmpty(((HyperlinkButton)sender).NavigateUri.ToString()) == false)
        {
            string AccountID = ((HyperlinkButton)sender).NavigateUri.ToString();
            ((HyperlinkButton)sender).NavigateUri = null; // here some ID not a link so it gives me Catastrphy error if I do not make it null
            var pageAccount = new PageAccount();
            pageAccount.Load(AccountID);
            Dispatcher.BeginInvoke(pageAccount.Show);
        }
    }
    else
    {
        ((HyperlinkButton)sender).NavigateUri = null;
    }
}

Thanks,
Gaurang
Tags
GridView
Asked by
Gaurang
Top achievements
Rank 1
Answers by
Rossen Hristov
Telerik team
Gaurang
Top achievements
Rank 1
Share this question
or