Где и когда вам нужно вставить дополнительный элемент управления?
Скорее всего, вы должны подключить метод к событию OnItemDataBound
и решить, добавлять элемент управления или нет. Событие дает вам ссылку на привязываемый предмет, чтобы вы могли сказать e.Item.Controls.Add(your_control)
Обновление
Ах, теперь я понимаю, что вы просите. Вам нужно добавить еще один аргумент к вашему Method1
, который принимает DataGridItem
. Когда вы вызываете Method1, вы добавляете его следующим образом Method1(Container)
, где Container
относится к рассматриваемому DataGridItem
. Тогда вы можете сказать в Method1
public string Method1(DataGridItem item)
{
string col1 = DataBinder.Eval(item.DataItem, "Column1").ToString();
string col2 = DataBinder.Eval(item.DataItem, "Column2").ToString();
var col2label = new Label() { Visible = true, Text = col2 };
var col2Holder = item.FindControl("col2Holder");
col2Holder.Controls.Add(col2label);
return col1 + "Called method1";
}
Кстати, вы не можете добавлять какие-либо элементы управления в Label, ваш ItemTemplate должен выглядеть следующим образом
<ItemTemplate>
<asp:Label ID="col1Label" runat="server" Text="<%# Method1(Container) %>" />
<asp:PlaceHolder ID="col2Holder" runat="server" />
</ItemTemplate>
Если вы хотите, чтобы новая метка была вложена в первую метку, вы должны сделать это явным образом в методе и не указывать местозаполнитель:
<ItemTemplate>
<asp:Label ID="label" runat="server" Text="<%# Method1(Container) %>" />
</ItemTemplate>
public string Method1(DataGridItem item)
{
string col1 = DataBinder.Eval(item.DataItem, "Column1").ToString();
string col2 = DataBinder.Eval(item.DataItem, "Column2").ToString();
var label = item.FindControl("label");
var col2label = new Label() { Visible = true, Text = col2 };
col1Holder.Controls.Add(col2label);
return col1 + "Called method1";
}