1

我有一个UltraGrid绑定到DataTable具有两列(键、值)的 a 。我在 DataTable 中添加了 10 行,现在第 11 行的 Value 列中有一个 URL。URL 值添加得很好,但它不像超链接那样工作。要将其作为超链接工作,我需要如何将此行添加到 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);
4

2 回答 2

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;
    }
}
于 2013-02-05T20:20:50.310 回答
1

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

然后网格将CellLinkClicked在您的代码中引发一个事件。

于 2013-02-05T17:54:44.753 回答