2


0

DataRow内のリンク(Datatable)

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"] = "Link here";

        dataTable.Rows.Add(row);

    }

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


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

P.S. 例にはありませんが、列は動的に追加されます(これは、レンダリングする前に列の数を知らないことを意味します)

*アップデート#1 *

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

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

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

   row["col"] = "Link here";

しかし、2つの列「col」が表示されます…​

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

4 Answer


1


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


1


これが尋ねられてから長い時間が経ちましたが、最初のグーグルの結果の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();


0


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



0


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

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

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

編集:列のテンプレートだけでなく、 `AutoGenerateColumns =" true "`があるため、列が重複しています。