2012-08-01 85 views
2

首先:我知道這裏已經有一些模糊的類似請求,但沒有一個能完全解決我的問題,而且我在智慧的最後嘗試着拼湊一個解決方案。動態創建一列數據表作爲超鏈接

無論如何,所以我正在編寫Web界面以從RESTful API獲取一些信息。我生成一個數據表,我通過這樣的gridview顯示:

DataTable table = new DataTable(); 
table.Columns.Add("entry name"); 
table.Columns.Add("col1"); 
table.Columns.Add("col2"); 
table.Columns.Add("etc"); 

foreach(string name in GetNames()) 
{ 
    DataRow row = table.NewRow(); 
    row["name"] = name; 
    row["col1"] = SomeMethod(name); 
    row["col2"] = SomeOtherMethod(name); 
    row["etc"] = YouGetTheIdea(name); 
    table.Rows.Add(row); 
} 

GridView1.DataSource = table; 
GridView1.DataBind(); 

到目前爲止很好。我真正喜歡的是「名稱」列是超鏈接,這樣他們可以調用名稱作爲參數的方法;或者鏈接到一個網站,名稱爲URL,即這樣的一部分:

"<a href:'www.example.com/" + name + ".csv'>" + name + "</a>" 

我不能爲我的生活弄清楚如何動態地,因爲我想去做這些事情。您的幫助將不勝感激。謝謝。

回答

0

一種解決方案是將列值設爲URL,然後對於綁定列設置HtmlEncode = false。這意味着,在你的foreach你會做一些像row['link'] = "<a href='..'>..</a>"。當這個綁定時,它應該輸出爲HTML。

或者,您可以鉤入GridView上的OnRowDataBound事件並在後面的代碼中操縱值。

或者,最後,你可以創建結合適當一個ItemTemplate柱:

<asp:TemplateField HeaderText="Seniority"> 
    <ItemTemplate> 
     <a href='example.com/<%# Eval("name")) %>'><%# Eval("name")) %></a> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

未能由於愚蠢的錯別字幾次之後,我終於設法得到OnRowDataBound事件工作(如果這不是明顯的:我我不是一個專家程序員)。這不太適用於調用另一種方法 - 我懷疑答案就在於通過編程添加按鈕和相關的onclick列,但我很累,這個解決方案對於今天來說已經足夠了:)感謝您的快速響應:) – alphasmart 2012-08-01 16:27:13

+0

@alphasmart如果您需要關聯的onclick,請查看[commandfield專欄](http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.commandfield.aspx)。 – Prescott 2012-08-01 16:31:00

+0

雖然我幾乎在每一步都想着「這樣做一定有更好的方法」,但我終於明白了這一點。再次感謝 :) – alphasmart 2012-08-02 11:14:54