Benutzer mit den meisten Antworten
ListView - 2 Probleme mit SELECT

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!
Antworten
-
Hallo Anton,
SelectedItem habe ich, aber wie kann man dann die Spalten zugreifen?
probier mal bitte dann noch das hier zusätzlich.
SelectedItem. ????
????
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
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? -
- Als Antwort markiert Anton Tsibert Freitag, 21. August 2009 11:30
- Tag als Antwort aufgehoben Anton Tsibert Freitag, 21. August 2009 13:20
-
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 ... -
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! -
Hallo Anton,
Jetzt geht es nur mit dem Wert, was ich im DataKeyNames-Eigenschaft geschrieben habe.
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.
Also ich kann nur 1 Spalte in ListView zugriefen.
Wie kann ich weitere Spalten aus diser Zeile auslesen???
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- Bearbeitet Stefan FalzModerator Freitag, 21. August 2009 15:40
-
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? -
Hallo Anton,
14 | 12.06.2009 | Musterman | Berlin
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.
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?
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
-
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.
-
Hallo Anton,
SelectedItem habe ich, aber wie kann man dann die Spalten zugreifen?
probier mal bitte dann noch das hier zusätzlich.
SelectedItem. ????
????
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