我有一个问题,在我的页面上我有一个ListView控件,我还有一个具有CommandArgument的按钮。我知道我可以在ListView中读取并找到一个控件:
ListView.Items[i].FindControl("controlname");
我在ListView中的按钮就是那个
asp:Button ID="WisdomButton" runat="server" CommandName="UpdateWisdom" CommandArgument='<%# need my index for Item[i] to post here %>'
OnCommand="UpdateWisdom" Text="Update" />
我想在运行时将索引值添加到CommantParameter中,所以当我转到Function onCommand时,我将确切知道从哪个行[i]我需要从ListView获取我的控件。
所以我的问题是,如何在运行时将ListView.Rows [i]的索引添加到CommmandArgument for Button中?
提前致谢。
答案 0 :(得分:4)
查看API
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listviewcommandeventargs.aspx
ListViewCommandEventArgs项目有索引,IE已经在参数中可用
ListViewDataItem dataItem = (ListViewDataItem)e.Item;
int i = dataItem.DisplayIndex;
但是从这里你可以访问这些控件
e.Item.FindConrol("controlName");
如果您以不同的方式调用方法,则可以通过ItemDataBound事件分配索引
void MyListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
((Button)e.Item.FindControl("WisdomButton")).CommandArgument = ((ListViewDataItem)e.Item).DisplayIndex;
}
或者尝试这样的事情来嘻嘻哈哈
<asp:Button runat="server" CommandArgument='<%# DisplayIndex %>'/>
// OR
<asp:Button runat="server" CommandArgument='<%# NextIndex() %>'/>
答案 1 :(得分:0)
了解一下你想做什么可能会有所帮助。如果您的最终目标是从绑定对象获取任何属性,则可以从ItemCommand事件的ListViewCommandEventArgs转换dataItem。您根本不需要保留索引或调用FindControl。
以下是如何获取绑定的Customer对象的示例。
<强>的ListView 强>
<asp:ListView runat="server" id="Customers" ItemCommand="Customers_ItemCommand">
<LayoutTemplate>
<ul>
<asp:placeholder runat="server" id="itemPlaceholder" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li>
<asp:Button runat="server" id="Select" CommandName="Select" />
<%# Eval("Name")%>
</li>
</ItemTemplate>
</asp:ListView>
<强>代码隐藏强>
public void Page_Load()
{
if (!Page.IsPostBack)
{
this.Customers.DataSource = GetCustomers();
this.Customers.DataBind();
}
}
public void Customers_ItemCommand(object sender, ListViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
if (e.Item.ItemType != ListViewItemType.DataItem)
return;
var customer = ((ListViewDataItem)e.Item).DataItem as Customer;
if (customer != null)
{
// Now work directly with the customer object.
Response.Redirect("viewCustomer.aspx?id=" + customer.Id);
}
}
}
编辑:当您将项目转换为ListViewDataItem时,您还会公开((ListViewDataItem)e.Item)。DataItemIndex属性,这可能会对您有所帮助。