C# listview中的findcontrol
我想使用C# listview中的findcontrol,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我想使用FindControl查找HiddenField的值,即hfBlogID。我想在按钮上查找值单击 <asp:ListView ID="lvArticle" runat="server"> <LayoutTemplate> <div runat="server" id="itemPlaceHolder"> </div> </LayoutTemplate> <ItemTe
FindControl
查找HiddenField
的值,即hfBlogID
。我想在按钮上查找值单击
<asp:ListView ID="lvArticle" runat="server">
<LayoutTemplate>
<div runat="server" id="itemPlaceHolder">
</div>
</LayoutTemplate>
<ItemTemplate>
<asp:HiddenField ID="hfBlogID" Value='<%#Eval("BlogID")%>' runat="server" />
<p>
<%#Eval("BlogTitle")%></p>
<p>
<%#Eval("BlogDetails")%></p>
</ItemTemplate>
</asp:ListView>
如果按钮在listview中,则可以使用
var control = (HiddenField)e.Item.FindControl("hfBlogID");
或者如果按钮不在您的列表中
var contorl = (HiddenField)this.lvArticle.Items[this.lvArticle.SelectedIndex].FindControl("hfBlogID");
为了确定正确的行索引,您应该将按钮放在ListView.ItemTemplate
中,并处理ListView.ItemCommand
事件
为了实现此方法,您必须按如下方式更改代码:
<asp:ListView ID="lvArticle" runat="server" OnItemCommand="lv_ItemCommand">
..
<ItemTemplate>
<asp:HiddenField ID="hfBlogID" Value='<%#Eval("BlogID")%>' runat="server" />
<p>
<%#Eval("BlogTitle")%></p>
<p>
<%#Eval("BlogDetails")%></p>
<asp:Button runat="server" CommandName="find" CommandArgument='<%# Eval("yourIDField") %>' />
</ItemTemplate>
...
protected void find_Click(object sender, EventArgs e)
{
var hidden = this.lv.Items[this.lv.SelectedIndex].FindControl("your hidden ID") as HiddenField;
}
如果按钮不在ListView中,则需要一种方法来标识要从中提取隐藏值的行
例如,如果允许在列表视图中选择一行,则可以从所选行中获取隐藏值,如下所示:
<asp:ListView ID="lvArticle" runat="server" OnItemCommand="lv_ItemCommand">
..
<ItemTemplate>
<asp:HiddenField ID="hfBlogID" Value='<%#Eval("BlogID")%>' runat="server" />
<p>
<%#Eval("BlogTitle")%></p>
<p>
<%#Eval("BlogDetails")%></p>
<asp:Button runat="server" CommandName="find" CommandArgument='<%# Eval("yourIDField") %>' />
</ItemTemplate>
...
protected void find_Click(object sender, EventArgs e)
{
var hidden = this.lv.Items[this.lv.SelectedIndex].FindControl("your hidden ID") as HiddenField;
}
如果按钮位于同一项模板中,则使用ItemCommand事件处理程序,并在该处理程序中直接获取隐藏字段
如果按钮不在列表视图中,则需要获取其隐藏字段值的项目索引。在此,您可以访问每个项目的隐藏字段:
protected void Button1_Click(object sender,EventArgs e)
{
foreach(ListViewDataItem item in lvArticle.Items)
{
HiddenField hf=(HiddenField)item.FindControl("hfBlogID");
}
}
若你们已经有了项目的索引,那个么你们可以像这样直接得到它
HiddenField hf=(HiddenField)lvArticle.Items[index].FindControl("hfBlogID");
希望这会有所帮助。我的按钮不在我的列表视图中。
…我无法获取所选索引,因为没有选择任何内容…但一次只有一行…因此我可以始终选择第一行。.我该如何做?如果只有一行,则使用此:var hidden=this.lvArticle.Items[0]。FindControl(“您的隐藏ID”)作为HiddenField;
我得到此异常System.ArgumentOutOfRangeException:索引超出范围。必须为非负且小于集合的大小。
则表示列表视图为空。是否确定它包含一行?如果要执行命令,这不是使用列表视图的典型方式您应该将按钮放在项目模板
中,否则(就像您的情况一样),您应该完全确保您的列表视图
在您试图访问它的位置包含一个项目。您可以尝试添加一个条件,但这不是办法。如果(this.lv.Items.Count>0)添加。