以编程方式在Silverlight DataGrid中创建超链接列

时间:2011-04-04 15:18:46

标签: c# silverlight

我需要创建一个包含各种列的数据网格。其中一列需要是指向URL的超链接。例如,我可能在网格中有人的记录,并且名称将链接到指向用户文件的URL。 这是使用编程创建的超链接在silverlight中完成的。

我是通过执行RowDataBind方法在asp中完成此操作,我需要在Silverlight中执行此操作 -

    protected void gvOrderData_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            // Setup links
            string OrderLink = "'http://crm1:5555/sfa/salesorder/edit.aspx?id={";


            e.Row.Cells[0].Attributes.Add("onclick", "window.open(" + OrderLink + DataBinder.Eval(e.Row.DataItem, "SalesOrderID").ToString() + "}','tester','scrollbars=yes,resizable=yes');");
            e.Row.Cells[0].Attributes.Add("onmouseover", "this.style.cursor='pointer'");


        }

    }

2 个答案:

答案 0 :(得分:0)

不幸的是,您无法在代码中创建DataTemplate ...但您可以在XAML中创建DataTemplate作为资源,并将其分配给代码中的列:

((DataGridTemplateColumn)dg.Columns[0]).CellTemplate = (DataTemplate)this.Resources["dt"];

来自:http://forums.silverlight.net/forums/p/12912/41962.aspx

答案 1 :(得分:0)

为什么需要在代码中执行此操作?可以使用带有适当模板的DataGridTemplateColumn在XAML中完成,例如:

<sdk:DataGridTemplateColumn Header="View" CellTemplate="{StaticResource MyDataTemplate}">
</sdk:DataGridTemplateColumn>

..并在页面资源中定义模板

<DataTemplate x:Key="MyDataTemplate">
      <HyperlinkButton x:Name="ViewLink"
                Style="{StaticResource ViewButton}"
                Click="ViewLink_Click">
      </HyperlinkButton>
</DataTemplate>

您可以添加一些逻辑来在后面的代码中打开子窗口,或者在纯粹的MVVM路径之后添加一个命令来处理超链接点击事件。