2009-03-28 7 views
2

Ich habe eine Frage, auf meiner Seite habe ich ein ListView-Steuerelement, ich habe auch eine Schaltfläche mit CommandArgument. Ich weiß, ich kann lesen und eine Kontrolle in der Listview wie finden:Wie in Runtime ein Index der Zeile für ListView übergeben?

ListView.Items[i].FindControl("controlname"); 

und meine Taste in Listview wie ist diese

asp:Button ID="WisdomButton" runat="server" CommandName="UpdateWisdom" CommandArgument='<%# need my index for Item[i] to post here %>' 
            OnCommand="UpdateWisdom" Text="Update" /> 

Ich mag Indexwert in der Laufzeit der CommantParameter hinzuzufügen, so dass, wenn Ich gehe zur Funktion onCommand Ich weiß genau aus welcher Zeile [i] ich brauche meine Steuerelemente aus ListView.

Also meine Frage ist, wie kann ich dynamisch Index von ListView.Rows [i] in CommandArgument für den Button in Runtime hinzufügen?

Vielen Dank im Voraus.

Antwort

4

Schauen Sie sich die API

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listviewcommandeventargs.aspx

Der ListViewCommandEventArgs Artikel ein Index ist, dh es ist in dem Argument bereits verfügbar ist

ListViewDataItem dataItem = (ListViewDataItem)e.Item; 
int i = dataItem.DisplayIndex; 

Aber von hier aus haben Sie Zugriff auf diese Kontrollen haben

e.Item.FindConrol("controlName"); 

Wenn Sie anrufen t er Methode eine andere Art und Weise Sie den Index durch einen ItemDataBound Event-aways zuordnen konnte

void MyListView_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    ((Button)e.Item.FindControl("WisdomButton")).CommandArgument = ((ListViewDataItem)e.Item).DisplayIndex; 
} 

oder versuchen Sie so etwas für kichert

<asp:Button runat="server" CommandArgument='<%# DisplayIndex %>'/> 
// OR 
<asp:Button runat="server" CommandArgument='<%# NextIndex() %>'/> 
+0

Fühlen Sie sich wie es in der Nähe, was ich brauche, aber kann Ihre Lösung nicht funktionieren ... – Dmitris

+0

e.Item gibt Ihnen die ausgewählte/angeklickte ListViewDataItem Zeile, die Sie dann die untergeordneten Steuerelemente finden können.Dieses ListViewDataItem-Steuerelement behält seinen eigenen Index, so dass Sie keine eigene – Steve

0

Es könnte helfen, ein wenig mehr darüber zu wissen, was Ihr versuchen, machen. Wenn Ihr Endziel darin besteht, irgendwelche Eigenschaften von Ihrem gebundenen Objekt zu erhalten, können Sie das dataItem einfach aus dem ListViewCommandEventArgs des ItemCommand-Ereignisses umwandeln. Sie müssen den Index nicht beibehalten oder FindControl aufrufen.

Hier ist ein Beispiel, wie Sie das gebundene Customer-Objekt erhalten.

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> 

Codebehind

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); 
    } 
    } 
} 

Edit: In addtion, wenn Sie werfen das Element an einen ListViewDataItem, dann auch Sie eine ((ListViewDataItem) e aussetzen. Artikel). DataItemIndex Eigenschaft, die Ihnen helfen könnte.

+0

erstellen müssen. Für den Für sein commandArgument versuche ich Set-Wert, der Array-Index ist, den ListView erstellt – Dmitris

+0

Der Punkt ist, dass Sie den Index möglicherweise nicht benötigen, wenn Sie nur direkten Zugriff auf Ihr DataItem erhalten können. – bendewey

+0

Ich habe eine Bearbeitung hinzugefügt, um den DataItemIndex anzuzeigen, wenn Sie das brauchen. – bendewey

Verwandte Themen