Я предполагаю, что сетка, на которую вы ссылаетесь, является сеткой данных?
Этот урок имеет отличный пример. Подведем итог:
Добавьте столбец Шаблон в сетку вместо столбца кнопки ссылки:
<asp:datagrid id="dataGrid1" runat="server" Width="792px"
AutoGenerateColumns="False"
CellPadding="0" >
<Columns>
<asp:BoundColumn DataField="id" HeaderText="ID">
<HeaderStyle Width="190px" HorizontalAlign="Center" >
</HeaderStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="Tags"
HeaderStyle-HorizontalAlign="Center">
<ItemStyle HorizontalAlign="Left" Wrap="True"></ItemStyle>
<ItemTemplate>
<asp:Repeater ID="rptChild" runat="server" DataSource='<%# DataBinder.Eval(Container.DataItem, "tags").ToString().Split(tagSplitChars) %>'>
<ItemTemplate>
<asp:LinkButton ID="linkChild"
runat="server"
CommandArgument="<%# Container.DataItem%>"
>
<%# Container.DataItem%>
</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle PageButtonCount="20" Mode="NumericPages"></PagerStyle>
</asp:datagrid>
Обратите внимание, что tagSplitChars должен быть определен в вашем коде как:
protected char[] tagSplitChars = new char[] { ' '};
Очевидно, что вы можете добавить обработчик «onclick» к кнопке ссылки, как вам нужно.
Я проверил это с этим кодом, и он отлично работает:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Demo
{
public partial class WebForm1 : System.Web.UI.Page
{
public char[] splitChars = new char[] { ' '};
protected void Page_Load(object sender, EventArgs e)
{
dataGrid1.DataSource = new List<dynamic>() { new { id = 1, names = "one single" }, new { id = 2, names = "two double" } };
dataGrid1.DataBind();
}
}
}
UPDATE
Если вы просто пытаетесь добавить список кнопок и у вас нет других столбцов для отображения в вашей сетке, вы можете значительно упростить решение:
<asp:Repeater ID="rptChild" runat="server" >
<ItemTemplate>
<asp:LinkButton ID="linkChild" runat="server">
<%# Container.DataItem%>
</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
Тогда в коде
protected void Page_Load(object sender, EventArgs e)
{
dataGrid1.DataSource = myTagsString.split(splitChars);
dataGrid1.DataBind();
}
Очевидно, что вам нужно будет получить доступ к данным в вашей таблице данных вручную, чтобы извлечь строку, не делали этого некоторое время, но из памяти это довольно просто.