2013-02-05 145 views
1

我有一个UltraGrid,它绑定到带有两列(键值)的DataTable。我在DataTable中添加了10行,现在第11行在Value列中有一个URL。 URL值可以很好地添加,但它不能像超链接一样工作。要使其作为超链接工作,我如何需要将此行添加到UltraGrid中? 我的代码:Infragistics UltraGrid中的超链接单元格

DataTable dt = new DataTable(); 
dt.Columns.Add("Key", typeof(string)); 
dt.Columns.Add("Value", typeof(string)); 
ultraGrid.DataSource = dt; 

foreach (KeyValuePair<string, string> kvp in dictionary) 
{ 
    dt.Rows.Add(kvp.Key, kvp.Value); 
} 

// Adding the row which has the URL value. 
string url = "SomeURL"; 
Uri hyperLink = new Uri(url); 
dt.Rows.Add("Click this", hyperLink); 

回答

3

尽管U1199880给出的答案指出了部分正确的解决方案,但将该样式应用于整列时仍有问题。该列中的每个单元格都将被视为链接。

相反,您需要拦截InitializeRow事件并检查当前行的当前单元格是否为有效的URI。然后将单元格Style属性更改为ColumnStyle.URL

private void grd_InitializeRow(object sender, InitializeRowEventArgs e) 
{ 
    if (e.ReInitialize == false) 
    { 
     UltraGridColumn c = e.Row.Band.Columns["Value"]; 
     string link = e.Row.GetCellValue(c).ToString(); 
     if (Uri.IsWellFormedUriString(link, UriKind.Absolute)) 
      e.Row.Cells["Value"].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.URL; 
    } 
} 
1

当你定义网格列使用类型:Infragistics.Win.UltraWinGrid.ColumnStyle.URL作为列类型。

然后网格会在你的代码中产生一个CellLinkClicked事件。

+0

这将更改列中的每个单元格而不仅仅是最后一个。 – Steve

+0

您可以在单元上设置样式:http://help.infragistics.com/NetAdvantage/WinForms/Current/CLR4.0/?page=Infragistics4.Win.UltraWinGrid.v12.2~Infragistics.Win.UltraWinGrid.UltraGridCell_members .html – alhalama

+0

链接被@alhalama打破了评论。基本上你可以做'cell.Style = ColumnStyle.URL'。这里是[当前文档]的链接(http://help.infragistics.com/Help/Doc/WinForms/2014.2/CLR4.0/html/Infragistics4.Win.UltraWinGrid.v14.2~Infragistics.Win.UltraWinGrid。 UltraGridCell_members.html),希望它不会太早破坏。 (Infragistics需要修复他们的文档,yeeesh!) –

相关问题