2011-09-08 64 views
0

通过在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; 

的第一FOW但得到一个错误 “索引超出范围。”

回答

1

我想你想找到特定行内的控件。

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

做了同样到DetailsView控件,它是确定..这有什么错 的ListView?

一个DetailsView用于在同一时间与一行来解决这样你就可以直接调用DetailsView控件,但GridView控件和ListView FindControl()是为了显示多个记录,您的标记,你里面<ItemTemplate />定义仅仅是为每个模板行。您将能够在每行内部的模板中找到您定义的控件。

+0

对,没有提到,因为listview显示单行.. – RaShe

+0

@RaShe没关系,如果它只显示单行。该控件适用于多行。考虑一个'List '。即使列表只有一个字符串,也不能对列表执行字符串操作。您必须先检索一个项目,然后对该项目执行任何字符串操作。如果你总是只有一行,那么你应该坚持DetailsView或检索行,然后尝试访问控件。 –

+0

我明白了。 现在我试图获取该行 ListViewDataItem curBalanceLV = LVMarketBalanceShow.Items [0]; string curBalanceStr =((Label)curBalanceLV.FindControl(“lblMarketLVBalanceValue”))。 但我有一个错误“索引超出范围”。 – RaShe