在listview中查找控件

时间:2011-09-08 00:11:12

标签: asp.net listview gridview findcontrol

通过在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做了同样的事情并且没问题.LinkView有什么问题?

UPD:试图获得listview的第一个目标

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

但是收到错误“索引超出了范围。”

2 个答案:

答案 0 :(得分:1)

我想你想在特定行中找到控件。

string curBalanceStr = ((Label)row.FindControl("lblMarketLVBalanceValue")).Text

答案 1 :(得分:1)

  

和DetailsView一样,它确实没问题。有什么问题   的ListView?

DetailsView用于一次处理一行,因此您可以直接在详细信息视图上调用FindControl(),但gridview和listview用于显示多个记录,您在<ItemTemplate />内定义的标记是只是每行的模板。您将能够找到您在每行内的模板中定义的控件。