none
ListView - 2 Probleme mit SELECT RRS feed

  • Frage

  • Hallo,

    ich habe wenig Erfahrung in ASP.NET und mit dem ListView-Element - gar nicht. Bis jetzt habe ich nur GridView verwendet.

    Mit ListView kann 2 Sachen nicht verstehen:

    1. Wie kann ich die selectierte Zeile mit einer anderen Farbe markieren?
    (so was <SelectedRowStyle> wie beim GridView gibt es nicht)


    2. Wie kann man einen Wert (Spalte) aus dieser selectierten Zeile auslesen?

    mit GridView und Code: Me.GV_Belege.SelectedDataKey.Item(1).ToString() geht ohne Probleme,
    bei dem ListView-Element bekomme ich folgende Meldung:
     "Für die ListView "lvBelege" müssen zuerst Datenschlüssel angegeben werden, bevor diese abgerufen werden können. Geben Sie Datenschlüssel mithilfe der DataKeyNames-Eigenschaft an."

    DANKE!
    Mittwoch, 19. August 2009 12:26

Antworten

  • Hallo Anton,
    SelectedItem habe ich, aber wie kann man dann die Spalten zugreifen?

    SelectedItem. ????
                         ????
    probier mal bitte dann noch das hier zusätzlich.

    Private Sub <ListView>_ItemDataBound( ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs ) Handles <ListView>.ItemDataBound
    
        If e.Item.ItemType <> ListViewItemType.DataItem Then
            Exit Sub
        End If
    
        If <ListView>.SelectedIndex = -1 OrElse <ListView>.SelectedIndex <> CType( e.Item, ListViewDataItem ).DataItemIndex Then
            Exit Sub
        End If
    
    Dim DataItem As DataRowView = CType( CType( e.Item, ListViewDataItem ).DataItem, DataRowView )
        
    End Sub
    Im Beispiel wurde eine DataTable als DataSource für die ListView angegeben. Über DataItem( "<NameDerSpalte" ) kann man dann auf die einzelnen Werte zugreifen. Wenn Du eine andere Datenquelle hast, musst Du dann bspw. über DataItem.<NameDerProperty> o.ä. zugreifen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert Anton Tsibert Freitag, 28. August 2009 12:44
    Donnerstag, 27. August 2009 09:38
    Moderator

Alle Antworten

  • OK, das erste Problem ist gelöst,  habe ich hier im Forum ein Beispiel abgeschaut (mit Radionbutton)

    Manchmal sucht man etwas ganz weit, und das lieg vor der Nase ;)

    Aber 2. Problem - ich gugle schon seit 3 Stunden - bei mir klappt etwas nicht!

    Was heßt die Meldung?:
    Für die ListView "lvBelege" müssen zuerst Datenschlüssel angegeben werden, bevor diese abgerufen werden können. Geben Sie Datenschlüssel mithilfe der DataKeyNames-Eigenschaft an

    die bekome ich HIER:
    Protected Sub lvBelege_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvBelege.SelectedIndexChanged
    Me.lblBelegNr.Text = lvBelege.SelectedDataKey.Item(2).ToString
    End Sub

    Welche DatakeyNamen soll ich eingeben?
    Mittwoch, 19. August 2009 14:31
  • Hallo Anton,

    Findest Du etwas Hilfe hier?

    http://forums.asp.net/t/1318092.aspx

    Grüße,

    Robert

    • Als Antwort markiert Anton Tsibert Freitag, 21. August 2009 11:30
    • Tag als Antwort aufgehoben Anton Tsibert Freitag, 21. August 2009 13:20
    Donnerstag, 20. August 2009 16:05
    Moderator
  • Hallo Robert, DANKE!!!, es funktioniert.

    Komisch nur, das im Beispiel unter Deinem Link geht es um GridView.
    Bei mir funktioniert mit dem GridView und mit der Zeile:

    Me.lblBelegNr.Text = Me.GV_Belege.SelectedDataKey.Item(1).ToString

    auch dann wenn die Eigenschaft "DataKeyNames" leer ist ...
    Freitag, 21. August 2009 11:30
  • Jetzt geht es nur mit dem Wert, was ich im  DataKeyNames-Eigenschaft geschrieben habe.
    Also ich kann nur 1 Spalte in ListView zugriefen.

    Wie kann ich weitere Spalten aus diser Zeile auslesen???

    So was wie SelectedRow.Cells(x) gibt es nicht. Im Netz gibt es viele Beispiele mit SubItem , aber bei mir fehlt das!
    Freitag, 21. August 2009 13:27
  • Hallo Anton,
    Jetzt geht es nur mit dem Wert, was ich im  DataKeyNames-Eigenschaft geschrieben habe.
    Also ich kann nur 1 Spalte in ListView zugriefen.

    Wie kann ich weitere Spalten aus diser Zeile auslesen???
    was genau willst Du da eigentlich machen? Doch hoffentlich nicht auf das DataItem (also das für die aktuelle Zeile zugrundeliegende Objekt aus der Datenquelle) zugreifen, oder? Das wird so nicht funktionieren (weder beim GridView noch bei ListView) und macht auch wenig Sinn, da Du dann alle Spalten als DataKeyNames angeben müsstest.

    Private Sub <ListView>_SelectedIndexChanging( ByVal sender As Object, ByVal e As ListViewSelectEventArgs ) Handles <ListView>.SelectedIndexChanging
    
        <ListView>.SelectedIndex = e.NewSelectedIndex
        <ListView>.DataBind()
    
    End Sub
    
    Private Sub <ListView>_SelectedIndexChanged( ByVal sender As Object, ByVal e As System.EventArgs ) Handles <ListView>.SelectedIndexChanged
    
        Dim SelectedItem As ... = <ListView>.Items( <ListView>.SelectedIndex )
        ...
    
    End Sub

    Damit sollte das gehen, was Du willst (so meine Glaskugel mich grad eben nicht fürchterbar angelogen hat :)

    Eins noch: Indizes sind nullbasiert, das erste Element ist also nich Irgendwas( 1 ) sondern Irgendwas( 0 ), das zehnte Element entsprechend Irgendwas( 9 )


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Freitag, 21. August 2009 15:35
    Moderator
  • Hallo Stefan,

    sorry, dass ich mein Problem nicht ganz deutlich beschrieben habe. Ich versuche es noch mal...

    Also ich selectiere folgende Zeile im ListViewElement :

    14   |   12.06.2009 Musterman   |   Berlin  

    wo 14 - Belegnummer ist und PK. Das kann ich ohne Problem auslesen (lvBelege.SelectedDataKey.Value.ToString )
    Ich brauche aber auch die Werte aus anderen Spalten - Datum 12.06.2009 - Name Musterman - Ort Berlin .

    Beim GridView Element geht es ganz eifach : gvBelege.SelectedRow.Cells(3).Text.ToString usw.

    Wie kann ich beim ListView z.B. Datum auslesen?
    Dienstag, 25. August 2009 09:16
  • Hallo Anton,
    14   |   12.06.2009 Musterman   |   Berlin  

    wo 14 - Belegnummer ist und PK. Das kann ich ohne Problem auslesen (lvBelege.SelectedDataKey.Value.ToString )
    Ich brauche aber auch die Werte aus anderen Spalten - Datum 12.06.2009 - Name Musterman - Ort Berlin .

    Beim GridView Element geht es ganz eifach : gvBelege.SelectedRow.Cells(3).Text.ToString usw.

    Wie kann ich beim ListView z.B. Datum auslesen?
    probier das bitte mal wie von mir beschrieben, das sollte klappen. Du musst auf das Item mit dem SelectedIndex zugreifen. Dazu musst Du das aber erst einmal setzen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 26. August 2009 18:56
    Moderator
  • Hallo Stefan, danke fuer deine Antworte :)

    natürlich habe ich das ausprobiert.

    Dim SelectedItem As ListViewItem = lvBelege.Items(lvBelege.SelectedIndex)

    SelectedItem habe ich, aber wie kann man dann die Spalten zugreifen?

    SelectedItem. ????
                         ????

    Das einzigste was "richtig" aussieht SelectedItem.Controls.Item(2)

    Aber da steht was anderes. Oder denke ich zu "flach"?

    Ich kann es einfach nicht finden. In google kommen immer wieder Beispiele mit SubItem(x) usw. Finde ich auch nicht.

    Das muss nicht so kommpliziert sein.



    Donnerstag, 27. August 2009 07:54
  • Hallo Anton,
    SelectedItem habe ich, aber wie kann man dann die Spalten zugreifen?

    SelectedItem. ????
                         ????
    probier mal bitte dann noch das hier zusätzlich.

    Private Sub <ListView>_ItemDataBound( ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs ) Handles <ListView>.ItemDataBound
    
        If e.Item.ItemType <> ListViewItemType.DataItem Then
            Exit Sub
        End If
    
        If <ListView>.SelectedIndex = -1 OrElse <ListView>.SelectedIndex <> CType( e.Item, ListViewDataItem ).DataItemIndex Then
            Exit Sub
        End If
    
    Dim DataItem As DataRowView = CType( CType( e.Item, ListViewDataItem ).DataItem, DataRowView )
        
    End Sub
    Im Beispiel wurde eine DataTable als DataSource für die ListView angegeben. Über DataItem( "<NameDerSpalte" ) kann man dann auf die einzelnen Werte zugreifen. Wenn Du eine andere Datenquelle hast, musst Du dann bspw. über DataItem.<NameDerProperty> o.ä. zugreifen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert Anton Tsibert Freitag, 28. August 2009 12:44
    Donnerstag, 27. August 2009 09:38
    Moderator
  • Hallo Stefan, DANKE !!! Es funktioniert!
    Freitag, 28. August 2009 12:44