Вы должны обработать событие OnRowDataBound, а затем использовать FindControl и свойство DataItem в аргументе события для извлечения данных, с которыми вы связываетесь. Вы должны предоставить свойства пользовательского элемента управления для назначения значений. Вот пример:
<asp:GridView ID="gvTest" runat="server" EnableViewState="false"
OnRowDataBound="gvTest_RowDataBound" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblTest" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
protected void Page_Load(object sender, EventArgs e)
{
gvTest.DataSource = new[] { 1, 2, 3, 4 };
gvTest.DataBind();
}
protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int item = (int)e.Row.DataItem;
Label lblTest = (Label)e.Row.FindControl("lblTest");
lblTest.Text = item.ToString();
}
}
Вместо int вы должны приводить к определенному типу данных, а вместо Label вы должны приводить к типу пользовательского элемента управления. Вместо свойства «Текст метки» вам следует передать свойство, которое вы открыли для своего пользовательского элемента управления.