Gridviewを含むWebページを作成しようとしています。このgridviewは以下のようなリンクを持っているはずです
http://localhost/Test.aspx?code=123
ユーザーがグリッドビューで行のリンクの1つをクリックすると、空白のページが開き、結果が表示されます。
これがデータをグリッドビューにバインドする方法ですが、リンクを設定する方法がわかりません
protected void Page_Load(object sender, EventArgs e)
{
string firma_no = logoFrmNr.ToString().PadLeft(3, '0');
string active_period = logoFrmPeriod.PadLeft(2, '0');
SqlConnection conn = new SqlConnection(conStr);
string selectSql = @"SELECT
LOGICALREF,
CODE ,
DEFINITION_ ,
FROM
LG_CLFLINE";
SqlCommand cmd = new SqlCommand(selectSql, conn);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
conn.Close();
}
ここがマークアップです
<asp:GridView ID="GridView1" runat="server" EnableModelValidation="True">
</asp:GridView>
CODE列からリンクを作成するにはどうすればよいですか?
これにはトリックがあります。リンクをフォーマットできないため、ハイパーリンク列は機能しません。バウンドフィールドを使用して、テキストをフォーマットします。そのようです
<asp:GridView ID="GridView1" runat="server" EnableModelValidation="True">
<Columns>
<asp:BoundField DataField="Code" HtmlEncode="False" DataFormatString="<a target='_blank' href='Test.aspx?code={0}'>Link Text Goes here</a>" />
</Columns>
</asp:GridView>
または、編集および挿入テンプレートを指定する必要がある場合は、テンプレートフィールドを使用できます。
これをグリッドビューのマークアップのColumns
定義に追加します。
<asp:TemplateField HeaderText="Hyperlink">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl='<%# Eval("CODE", @"http://localhost/Test.aspx?code={0}") %>'
Text='link to code'>
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
私にとっては
<asp:DataGrid id="MyDataGrid"
GridLines="Both"
AutoGenerateColumns="false"
runat="server">
<HeaderStyle BackColor="#aaaadd"/>
<Columns>
<asp:HyperLinkColumn
HeaderText="Select an Item"
DataNavigateUrlField="code"
DataNavigateUrlFormatString="http://localhost/Test.aspx?code={0}"
Target="_blank"/>
</Columns>
</asp:DataGrid>
マークアップでHyperLinkColumnを使用できるはずです。