C# 如何在运行时为ListView传递行索引?
我有一个问题,在我的页面上有一个ListView控件,我还有一个带有CommandArgument的按钮。我知道我可以在ListView中读取并找到一个控件,如下所示:C# 如何在运行时为ListView传递行索引?,c#,.net,asp.net,.net-3.5,C#,.net,Asp.net,.net 3.5,我有一个问题,在我的页面上有一个ListView控件,我还有一个带有CommandArgument的按钮。我知道我可以在ListView中读取并找到一个控件,如下所示: ListView.Items[i].FindControl("controlname"); 我在ListView中的按钮是这样的 asp:Button ID="WisdomButton" runat="server" CommandName="UpdateWisdom" CommandArgument='<%# ne
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" />
asp:Button ID=“WisdomButton”runat=“server”CommandName=“UpdateWisdom”CommandArgument=''
OnCommand=“UpdateWisdom”Text=“Update”/>
我想在运行时将索引值添加到CommantParameter,因此当我转到函数onCommand时,我将确切地知道从ListView获取控件所需的行[I]
所以我的问题是,如何在运行时将ListView.Rows[i]的索引添加到按钮的commmand参数中
提前感谢。查看API
ListViewCommandEventArgs项有一个索引,即它已在参数中可用
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() %>'/>
//或
多了解一点您想要做的事情可能会有所帮助。如果您的最终目标是从绑定对象获取任何属性,那么您只需从ItemCommand事件的。您根本不需要保留索引或调用FindControl
下面是一个如何获取绑定客户对象的示例
列表视图
<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>
编辑:此外,将项目强制转换为ListViewDataItem时,还将公开((ListViewDataItem)e.item)。属性,这可能会对您有所帮助。对于For it的commandArgument,我试图设置ListView创建的数组的索引值。重点是,如果您可以直接访问dataItem,则可能不需要索引。e.Item为您提供了选中/单击的ListViewDataItem行,然后您可以找到子控件。此ListViewDataItem控件保留其自己的索引,因此您无需创建自己的索引
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);
}
}
}