C# 如何在运行时为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控件,我还有一个带有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"   />
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);
    }
  }
}