トップ回答者
データベースから取得したデータにリンクを追加するには?

質問
-
現在、データベースからDataSetに取得したデータに対して、リンクのカラムを追加したいと考えています。
しかし、方法が解りません。
現在、下記のコードでDataSetの内容をGridViewに表示し、カラムの追加は出来たのですが、
リンクの箇所が「<a href=aaa.aspx>詳細</a>」と表示されてしまいます。
どのようにすればリンクが実現できるのでしょうか?
開発環境はVS2005 Webフォームです。
protected void Button1_Click(object sender, EventArgs e)
{
~データベース設定(省略)~
sqlConn.Open();
DataSet dtSet = new DataSet("DataTbl");
sqlDa.Fill(dtSet, "DataTbl");
sqlConn.Close();// DataGridViewにデータを表示
if (dtSet.Tables.Count > 0)
{
~ここでdtSetにリンクカラムの追加したい~
DataColumn colLink = new DataColumn();
colLink.ColumnName = "表示";
colLink.DataType = typeof(String);dtSet.Tables["DataTbl"].Columns.Add(colLink);
dtSet.Tables["DataTbl"].Rows[0]["表示"] = "<a href=aaa.aspx>詳細</a>";// GridViewに表示
GridView1.DataMember = dtSet.Tables[0].TableName;
GridView1.DataSource = dtSet;
GridView1.DataBind();
}
}
回答
-
HtmlEncode プロパティをfalseにしてみて下さい。
BoundField.HtmlEncode プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.boundfield.htmlencode.aspx
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク 2tom 2010年7月29日 2:14
すべての返信
-
HtmlEncode プロパティをfalseにしてみて下さい。
BoundField.HtmlEncode プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.boundfield.htmlencode.aspx
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク 2tom 2010年7月29日 2:14
-
昔、別のスレッドの検証用に作ったサンプルですが、以下が参考になりませんか?
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
DataTable CreateDataTable()
{
DataTable dt = new DataTable();
DataRow dr;dt.Columns.Add(new DataColumn("Code", typeof(Int32)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("Price", typeof(Int32)));for (int i = 0; i < 10; i++)
{
dr = dt.NewRow();
dr["Code"] = i;
dr["Name"] = "日本語 " + i.ToString();
dr["Price"] = 123000 * (i + 1);
dt.Rows.Add(dr);
}
return dt;
}void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = CreateDataTable();
GridView1.DataBind();
}
}</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Code" HeaderText="ID" />
<asp:BoundField DataField="Name" HeaderText="名前" />
<asp:BoundField DataField="Price" HeaderText="価格" />
<asp:TemplateField HeaderText="HyperLink">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1"
runat="server"
Text='<%# Eval("Name") %>'
NavigateUrl='<%# "~/default.aspx?keyword=" + Server.UrlEncode((string)Eval("Name")) %>'
Target="_blank" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html> -
HyperLinkFieldをカラムに追加することで解決しました。
以下、****.aspx.csのコードです。
protected void Button1_Click(object sender, EventArgs e)
{
~データベース設定(省略)~
sqlConn.Open();
DataSet dtSet = new DataSet("DataTbl");
sqlDa.Fill(dtSet, "DataTbl");
sqlConn.Close();// DataGridViewにデータを表示
if (dtSet.Tables.Count > 0)
{
string[] dataNavigateUrlFields = { "ID" };
HyperLinkField hyperLinkField = new HyperLinkField();
hyperLinkField.HeaderText = "表示";
hyperLinkField.Text = "詳細";
hyperLinkField.DataNavigateUrlFields = dataNavigateUrlFields;
hyperLinkField.DataNavigateUrlFormatString = "~/aaaa.aspx?ID={0}";// GridViewに表示
GridView1.Columns.Add(hyperLinkField);
GridView1.DataMember = dtSet.Tables[0].TableName;
GridView1.DataSource = dtSet;
GridView1.DataBind();
}
}皆様、ありがとうございました。