2012-03-19 2 views
1

Я получил часть ответа от another question, но не могу найти более конкретный бит информации, который мне нужно закончить.Сочетание колонны гипертекста Telerik и столбца сетки в 1 поле

Я пытаюсь объединить 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> 

Это хорошо работает в течение первых 2-х колонок что я объединяюсь в 1 (A & B).

Однако предположим, что элемент ["C"] является GridHyperLinkColumn. Когда я пытаюсь использовать тот же код, он показывает только / <D value>. Ничего не появляется перед косой чертой, где должно отображаться «C».

Есть ли другое свойство (вместо .Text) Я должен использовать или мне нужно сделать это по-другому?

ответ

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); 
} 
+0

Я попробовал метод GridTemplateColumn и это не сработало - я получаю «Eval может быть использован только в контексте DataBound колонке» ошибки. Я даже попытался поместить его в теги GridBoundColumn, и он пожаловался, что ItemTemplate недействителен. Тем не менее, я смог успешно его использовать, используя литераловую технику (это было довольно неплотно). Спасибо за вашу помощь. –

+0

@ShortyLong Интересно, что вы не могли получить первый пример для работы. Он работал правильно для меня, когда я вручную привязывал DataTable к сетке. Любая ставка, рад, что вы могли бы получить второй способ работы. Пожалуйста, отметьте мой ответ как принятый ответ. – csm8118

Смежные вопросы