найти элемент управления в списке

Нажав кнопку в GridView, мне нужно найти элемент управления в Listview.

<ItemTemplate>
<td>

    <asp:Label ID="lblMarketLVBalanceHeader" runat="server" Text="Balance: "></asp:Label>
</td>


<td>
    <asp:Label ID="lblMarketLVBalanceValue" runat="server" Text='<%# Bind("Money", "{0:####}$") %>'></asp:Label>

</td>

</ItemTemplate>

Код позади:

protected void GVMarketItems_RowCommand(object sender, GridViewCommandEventArgs e)
    {
if (e.CommandName.Equals("Buy"))
        {  GridViewRow row = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
         /*  string itemID = row.Cells[0].Text;
           string itemName = row.Cells[1].Text;
           string itemCostStr = row.Cells[3].Text; */
 string curBalanceStr = ((Label)LVMarketBalanceShow.FindControl("lblMarketLVBalanceValue")).Text;
}

Код кажется найденным, но у меня есть «Ссылка на объект, не установленная на экземпляр объекта», когда я пытаюсь найти элемент управления.

string curBalanceStr = ((Label)LVMarketBalanceShow.FindControl("lblMarketLVBalanceValue")).Text;

Сделал то же самое с DetailsView, и все было в порядке. Что не так с ListView?

UPD: Попытка получить первые несколько строк списка

ListViewDataItem curBalanceLV = LVMarketBalanceShow.Items[0];
       string curBalanceStr =((Label)curBalanceLV.FindControl("lblMarketLVBalanceValue")).Text;

Но получаю ошибку "Индекс вне допустимого диапазона".


person RaShe    schedule 08.09.2011    source источник


Ответы (2)


Я думаю, вы хотите найти элемент управления в определенной строке.

string curBalanceStr = ((Label)row.FindControl("lblMarketLVBalanceValue")).Text
person JNappi    schedule 08.09.2011

Сделал то же самое с DetailsView, и все было в порядке. Что не так с ListView?

DetailsView используется для работы с одной строкой за раз, поэтому вы можете напрямую вызывать FindControl() в подробном представлении, но gridview и listview предназначены для отображения нескольких записей, а ваша разметка, которую вы определяете внутри <ItemTemplate />, является просто шаблоном для каждой строки. Вы сможете найти элементы управления, которые вы определяете в шаблоне, внутри каждой строки.

person Bala R    schedule 08.09.2011
comment
@RaShe не имеет значения, если он отображает только одну строку. Элемент управления предназначен для нескольких строк. Рассмотрим List<String>. Даже если в списке всего одна строка, вы не можете выполнять над списком строковые операции. Сначала вам нужно будет получить один элемент, а затем выполнить любую строковую операцию над этим элементом. Если у вас всегда будет только одна строка, вам следует придерживаться DetailsView или получить строку, а затем попытаться получить доступ к элементу управления. - person Bala R; 08.09.2011
comment
Я понимаю, это. Теперь я пытаюсь получить эту строку ListViewDataItem curBalanceLV = LVMarketBalanceShow.Items[0]; string curBalanceStr =((Label)curBalanceLV.FindControl(lblMarketLVBalanceValue)).Text; Но у меня ошибка Индекс был вне допустимого диапазона. - person RaShe; 08.09.2011