将Telerik超链接列和gridboundcolumn组合为1个字段

时间:2012-03-19 20:09:18

标签: c# telerik telerik-grid

我能够从another question获得部分答案,但无法找到我需要完成的更具体的信息。

我正在尝试将2个字段组合成1,就像上面的问题一样,但其中一个是GridHyperLinkColumn。我在后面的代码中使用GridItemDataBound事件将2个字段放在一起,如下所示:

protected void GridItemDataBound(object sender, GridItemEventArgs e) {
  if (e.Item is GridDataItem) {
    GridDataItem item = (GridDataItem)e.Item;
    item["A"].Text = item["A"].Text + " /<br/>" + item["B"].Text;
    item["C"].Text = item["C"].Text + " /<br/>" + item["D"].Text;
   }
}

为简单起见,我的UI缩短了如下:

 <Columns>    
    <telerik:GridBoundColumn UniqueName="A" DataField="A" />
    <telerik:GridBoundColumn UniqueName="B" DataField="B" Visible="false" />
    <telerik:GridHyperLinkColumn DataNavigateUrlFields="ID"        DataNavigateUrlFormatString="~.aspx?ID={0}" DataTextField="C" Text="{0}" UniqueName="C" />     
    <telerik:GridBoundColumn UniqueName="D" DataField="D" Visible="false" />
  </Columns>

这适用于我合并为1(A&amp; B)的前2列。

但是假设item [“C”]是GridHyperLinkColumn。当我尝试相同的代码时,它只显示/ <D value>。没有任何东西出现在斜线前面,应该显示“C”。

是否有不同的属性(而不是.Text)我应该使用或者是否需要以不同的方式进行?

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。一种方法是使用模板列,如下所示:

<Columns>
    <telerik:GridTemplateColumn HeaderText="A and B">
        <ItemTemplate><%# Eval("A") %>/<br /><%# Eval("B") %></ItemTemplate>
    </telerik:GridTemplateColumn>
    <telerik:GridTemplateColumn HeaderText="B and C">
        <ItemTemplate><a href="blah.aspx?ID=<%# Eval( "C" ) %>"><%# Eval( "C" ) %></a>/<br /><%# Eval("D") %></ItemTemplate>
    </telerik:GridTemplateColumn>
</Columns>

如果您对使用模板列不感兴趣,可以按照您的方式使其工作。问题是GridHyperlinkColumn将链接呈现为控件(例如item["C"].Controls[0]),而不是直接在Text属性中。这是让它做你想做的一种方法:

if (e.Item is GridDataItem) {
    GridDataItem item = (GridDataItem)e.Item;
    item["A"].Text = item["A"].Text + " /<br/>" + item["B"].Text;
    Literal lit = new Literal();
    lit.Text = " /<br/>" + item["D"].Text;
    item["C"].Controls.Add( lit );
}