2

DataTableを動的に構築していて、DataTableに追加しているDataRowに「リ​​ンク」を追加しようとしています。DataTableは、作成後にGridViewにバインドされます。

そんな感じ :

   DataTable dataTable = new DataTable();
   foreach (Item item in items)
    {
        DataRow row = dataTable.NewRow();
        dataTable.Columns.Add(new DataColumn("col"));

        row["col"] = "<a href='http://www.google.com'>Link here</a>";

        dataTable.Rows.Add(row);

    }

次に、それをGridViewにバインドします。

        <asp:GridView ID="grdView" Runat="server" border="0" EnableViewState="true" style="width:100%;"
            AutoGenerateColumns="true" AllowPaging="false" PagerSettings-Visible="false" 
            ShowHeader="true" ShowFooter="true" CellPadding="0" CellSpacing="0"
            Visible="True">
        </asp:GridView>

しかし、列のHTMLは、GridViewにバインドするとエンコードされます。そこにハイパーリンクオブジェクトなどを追加する方法はありますか?

PSこれは例には含まれていませんが、列は動的に追加されます(つまり、レンダリング前に列の数がわからないということです)

更新#1

列を作成するときにGridViewにアクセスできます。私はそのようなことをすることができました:

    dataTable.Columns.Add(new DataColumn("col"));

    BoundField bf = new BoundField();
    bf.HtmlEncode = false;
    bf.DataField = "col";
    grd.Columns.Add(bf);

   row["col"] = "<a href='http://www.google.com'>Link here</a>";

しかし、それは2つの列「col」を表示します...

更新#3: 代わりにDataGridを使用しました。データ行の「プレーンテキスト」に挿入された場合、HTMLはエンコードされません。

4

4 に答える 4

1

これが尋ねられてから長い時間が経ちましたが、最初の Google 検索結果の 1 つであるここにたどり着いたので、「HyperLinkField」を追加してこれを解決したことをお伝えしたいと思います。

HyperLinkField myLink = new HyperLinkField();
myLink.HeaderText = "Link Here";
myLink.DataTextField = "Click here";
myLink.DataNavigateUrlFields = new string[] { "field1", "field2", "field3" };
myLink.DataNavigateUrlFormatString = "NewPage.aspx?id={0}&otherId={1}&otherId2={2}";

myGridView.Columns.Add(myLink);

//Finally bind the data...
myGridView.DataBind();
于 2014-10-07T10:41:37.917 に答える
1

クエリから html コードを返す場合はhtmlEncode=False、boundfield で使用してください。また、グリッドビューで AutoGenerateColumns="false" を設定します。これが、グリッドビューで二重列を取得する理由です。

于 2013-11-01T16:22:30.127 に答える
0

GridView には GridView_RowDataBound イベントがあり、行にコントロールを動的に挿入したり、コンテンツをフォーマットしたりできます。

テーブルの行要素 (DataItem) にアクセスし、それを解析して、必要に応じてグリッド行をフォーマットできます。

良い導入例については、http: //msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx?ppud=4を参照してください。

AutoGenerateColumns="true"編集:列のテンプレートと同様にあるため、列が重複しています。

于 2010-11-05T20:19:48.390 に答える
0

申し訳ありませんが無視してください...動的テーブルの制約が表示されませんでした なぜテンプレート列を GridView に追加してからハイパーリンクを追加するのですか。申し訳ありませんが、このコードはこのスペースで正しくフォーマットされないようです

    <asp:TemplateColumn>                                                                        <ItemTemplate>
<asp:HyperLink runat="server" ID="hypLink" Text="test" Target='<%# DataBinder.Eval(Container.DataItem, "moved_ref_amt").ToString() %>'></asp:HyperLink>                                                                        </ItemTemplate>                                                                            </asp:TemplateColumn>
于 2010-11-05T19:01:29.917 に答える