Ссылка в DataRow (Datatable) - PullRequest
       40

Ссылка в DataRow (Datatable)

2 голосов
/ 05 ноября 2010

Я строю DataTable динамически и пытаюсь добавить «ссылку» в DataRow (s), которые добавляю в DataTable.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.Есть ли способ добавить объект HyperLink или что-то подобное?

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 ]

1 голос
/ 07 октября 2014

Прошло много времени с тех пор, как об этом спросили, но я приехал сюда в качестве одного из первых результатов Google, поэтому я хотел бы сказать вам, что я решил эту проблему, добавив "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();
1 голос
/ 01 ноября 2013

Если вы возвращаете html-код из вашего запроса, просто используйте htmlEncode=False в вашем ограниченном поле.Также установите AutoGenerateColumns = "false" в вашем виде сетки, поэтому вы получаете двойные столбцы в вашем виде сетки.

0 голосов
/ 05 ноября 2010

GridView имеет событие GridView_RowDataBound, которое позволяет динамически вставлять элементы управления в строки, форматировать содержимое и т. Д.

У вас будет доступ к элементу строки таблицы (DataItem), и вы сможете проанализировать его и отформатировать строку сетки, как вам нужно.

Для хорошего вступительного примера см .: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx?ppud=4

Изменить: Вы получаете дубликаты столбцов, потому что у вас есть AutoGenerateColumns="true", а также шаблон для столбца.

0 голосов
/ 05 ноября 2010

извините, не обращайте внимания ... Я не вижу ограничения динамической таблицы. Почему вы добавляете столбец шаблона в 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>
...