2012-08-01 6 views
2

첫 번째 끄기 : 이미 여기에 약간의 모호한 요청이 있었지만 내 문제에 대한 완전한 해결책을 제공하지 못함을 알고 있습니다. 함께 솔루션을 만듭니다.동적으로 하나의 열을 하이퍼 링크로 사용하여 데이터 테이블 생성

어쨌든, 나는 RESTful API에서 정보를 얻기 위해 웹 인터페이스를 작성하고있다. 나는 아래와 같이 gridview를 통해 표시하는 datatable을 생성하고있다.

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(); 

지금까지는 그렇게 좋았다. 필자가 정말로 원하는 것은 "name"열이 하이퍼 링크가되어 이름으로 매개 변수로 메서드를 호출하거나, 또는이 같은 URL, 즉의 일부로서 이름, 웹 사이트 링크 :

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

내 인생 내가 같이 동적으로 내가 좋아하는 것처럼이 일을하는 방법을 알아낼 수 없습니다. 귀하의 도움을 많이 주시면 감사하겠습니다. 감사.

답변

0

한 가지 해결책은 열 값을 URL로 설정 한 다음 바운드 열로 설정하는 것입니다. HtmlEncode = false을 설정하십시오. 즉, foreach에서 row['link'] = "<a href='..'>..</a>"과 같은 작업을 수행 할 수 있습니다. 이것이 바인딩되면 HTML로 출력되어야합니다.

또는 GridView의 OnRowDataBound 이벤트에 연결하여 코드의 값을 조작 할 수 있습니다.

또는 마지막으로, 당신이 적절하게 결합하는 ItemTemplate을 열 만들 수 있습니다, 나는 마침내 작업 OnRowDataBound 이벤트를 얻을 수 있었다

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

을 바보 오타로 인해 여러 번 실패한 후을 ​​(경우에 그것은 분명 아니다 : I 전문가 프로그래머가 아니야). 이 방법은 다른 메서드를 호출하는 것을 다루지는 않습니다 - 프로그래밍 방식으로 onclick과 관련된 단추가있는 열을 프로그래밍 방식으로 추가하는 것에 대한 의문이 있습니다. 그러나 피곤하고이 솔루션은 현재로서는 충분합니다 :) 신속한 응답을 주셔서 감사합니다 :) – alphasmart

+0

@alphasmart 관련 onclick이 필요한 경우 [commandfield column] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.commandfield.aspx)을 확인하십시오. – Prescott

+0

거의 모든 단계에서 "이 작업을 수행하는 더 좋은 방법이 있어야합니다"라고 생각하면서 마침내 트릭을 수행하게되었습니다. 다시 한번 감사드립니다 :) – alphasmart

관련 문제