2017-06-14 6 views
0

Ich erstelle eine Listview und verbinde Daten aus der Datenbank.Zugriffswerte von Listview auf Code hinter

<asp:ListView runat="server" ID="lstService" DataTextField="Name" 
    DataValueField="Id" AutoPostBack="True"> 
    <LayoutTemplate> 
     <table runat="server" id="table1"> 
      <tr runat="server" id="itemPlaceholder"></tr> 
     </table> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <tr runat="server"> 
      <td runat="server"> 

       <asp:Label ID="NameLabel" runat="server" 
        Text='<%#Eval("Name") %>' Width="500px" Height="30px" /> 

       <asp:Button CssClass="btn btn-default" ID="srvButton" runat="server" 
        Text="Add" OnClick="srvButton_Click" /> 
       <div class="voffset3"></div> 

      </td> 
     </tr> 
    </ItemTemplate> 
</asp:ListView> 

Auf Code hinter verbinde ich Daten zu diesem Feld. Ich hole ID, Name Spalte.

Jetzt zeigt es Label und Schaltfläche mit Text "Hinzufügen" auf der Schaltfläche. Aber wenn ich auf Hinzufügen klicke, möchte ich den Wert von "Id" übergeben, der diesem Listenansichtselement zugeordnet ist. Wie kann ich das tun?

protected void srvButton_Click(object sender, EventArgs e) 
{ 

} 

Antwort

0

zuerst das Commandargument zu Ihrem Button mit dem Wert des Elemente ID:

<asp:Button CssClass="btn btn-default" ID="srvButton" runat="server" Text="Add" OnClick="srvButton_Click" CommandArgument='<%#Eval("Id")' /> 

Jetzt können Sie es in den srvButton_Click Handler zugreifen:

protected void srvButton_Click(object sender, EventArgs e) 
{ 
    Button myButton = (Button)sender; 
    int i = Convert.ToInt32(myButton.CommandArgument.ToString()); 
    //---- 
} 
+0

Dank gibt es ein So kann ich den Text = "Hinzufügen" oder "Entfernen" im Backend binden, ich möchte nicht standardmäßig als Text hinzufügen zuweisen. –

+0

Natürlich. Sie möchten Ihrer ListView einen ItemDataBound-Handler hinzufügen, und im Handler können Sie den Items die Text-Eigenschaft basierend auf Ihren Anforderungen zuweisen. Siehe hier: https://stackoverflow.com/questions/1588500/get-data-value-from-listview-itemdatound – mjw

0

können Sie die OnClick zu einem OnCommand ändern und eine CommandArgument zusammen mit ihm senden.

<asp:Button CssClass="btn btn-default" ID="srvButton" runat="server" 
    Text="Add" OnCommand="srvButton_Command" CommandArgument=<%# Eval("ID") %> /> 

Und dann in Code hinter

protected void srvButton_Command(object sender, CommandEventArgs e) 
{ 
    int id = Convert.ToInt32(e.CommandArgument); 
} 

Oder Sie OnItemCommand Ereignis des Listview zusammen mit der DataKeyNames Eigenschaft und eine Schaltfläche ohne ein Ereignis gebunden verwenden können.

<asp:ListView runat="server" ID="lstService" DataKeyNames="id" 
    OnItemCommand="lstService_ItemCommand"> 

    <asp:Button CssClass="btn btn-default" ID="srvButton" runat="server" Text="Add" /> 

Und dann in Code hinter erhalten Sie die datakey aus der ListView.

protected void lstService_ItemCommand(object sender, ListViewCommandEventArgs e) 
{ 
    int id = Convert.ToInt32(lstService.DataKeys[e.Item.DataItemIndex].Values[0]); 
} 
Verwandte Themen