aline234 Geschrieben 28. Oktober 2008 Geschrieben 28. Oktober 2008 Huhu, momentan blenden wir einige Spalten unserer ListViews aus, indem wir einfach die Width-Eigenschaft auf 0 setzen. Ist leider nicht so sauber, weil man dadurch die Spalte auch einfach wieder manuell größer ziehen kann und sie so wieder sichtbar wird. Gibt es da vielleicht noch eine andere Möglichkeit? Zitieren
Guybrush Threepwood Geschrieben 28. Oktober 2008 Geschrieben 28. Oktober 2008 Also bei Asp.net haben die Columns eine Visible Eigenschaft. Gibts sowas da nicht? Zitieren
aline234 Geschrieben 28. Oktober 2008 Autor Geschrieben 28. Oktober 2008 nein, leider nicht. das einzige was es noch gibt ist ein Remove(), aber das bringt mir auch nix, weil das dann wirklich komplett alles vernichtet und ich die daten in der spalte aber für eine weiterverarbeitung noch brauche. hm ich könnte das ja irgendwo zwischenspeichern... is aber auch wieder son rumgefrickel. Zitieren
Guybrush Threepwood Geschrieben 28. Oktober 2008 Geschrieben 28. Oktober 2008 hmm warum willst du die Spalte(n) denn überhaupt verstecken? Also soll da ein Wert drin gespeichert werden den der Anwender nicht sehen soll? weil das kann man ja zum Beispiel auch über die Tag Eigenschaft des ListViewItems machen. Zitieren
aline234 Geschrieben 29. Oktober 2008 Autor Geschrieben 29. Oktober 2008 (bearbeitet) also momentan seh ich auch einfach nur zwei möglichkeiten: 1. man lebt damit, dass der benutzer die spalte ganz einfach wieder breiter ziehen kann 2. man speichert die werte der spalte irgendwo zwischen und entfernt dann die komplette spalte aus der liste. bin mit beiden lösungen irgendwie nich so ganz zufrieden, aber die entgültige entscheidung trifft dann eh unsere systemarchitektin Bearbeitet 29. Oktober 2008 von aline234 Zitieren
Amstelchen Geschrieben 29. Oktober 2008 Geschrieben 29. Oktober 2008 was spricht gegen die verwendung eines DataGridView? dort lassen sich spalten tatsächlich ausblenden. übrigens würde ich versuchen, berechnungslogik soweit wie möglich aus spalten herauszunehmen, alles andere ist unsauber. s'Amstel Zitieren
aline234 Geschrieben 29. Oktober 2008 Autor Geschrieben 29. Oktober 2008 die überlegung steht auch gerade im raum, allerdings haben wir viele eigene steuerelemente, die auch ein listview enthalten und das dann alles in datagrids umzumodeln is auch nich gerade wenig arbeit. wir berechnen auch nix in oder mit unseren spalten. wir müssen nur später alles sauber über id's identifizieren. Zitieren
Amstelchen Geschrieben 29. Oktober 2008 Geschrieben 29. Oktober 2008 ich denk mal hier gibts einige konzeptionelle probleme und/oder ungereimtheiten definiere "alles sauber über id's identifizieren". wenn du eine nicht fachliche spalte in deiner ListView drin hast, dann würde ich diese wie oben bereits erwähnt über Tag machen. Tag ist nicht sichtbar, aber jederzeit zugreifbar? gibts hinter den ganzen verwendeten controls eine datenbasis, oder werden die halt nach gutdünken befüllt? s'Amstel Zitieren
aline234 Geschrieben 29. Oktober 2008 Autor Geschrieben 29. Oktober 2008 ehrlich gesagt is mir dieses zwischenspeichern auch nich so ganz geheuer. soweit ich mich erinnern kann konnte man in vb6 ganz einfach spalten ein- und ausblenden. warum das jetz in .net nich geht is mir irgendwie unklar. Zitieren
Guybrush Threepwood Geschrieben 29. Oktober 2008 Geschrieben 29. Oktober 2008 warum das jetz in .net nich geht is mir irgendwie unklar. Weil man es nicht braucht, zumindest nicht wenn man damit nur Informationen speichern will die der Anwender nicht sehen soll. Deswegen aber auch oben die Frage was genau da passiert bzw. passieren soll damit man dir eine Lösungsmöglichkeit nennen kann, sonst bleibt das nur Rätselraten Zitieren
aline234 Geschrieben 29. Oktober 2008 Autor Geschrieben 29. Oktober 2008 (bearbeitet) tja, kurz ausgedrückt: liste wird aus db gefüllt, der anwender kann sich einen eintag aussuchen und die auswahl wieder in die db geschrieben, wofür wir wieder die ausgeblendete id brauchen. die geschichte mit dem tag property wird hier übrigens nicht gerne gesehen. da gab es wohl zu früheren zeiten dann ungereimtheiten, weil jeder überall irgendwas zwischengespeichert hat und am ende niemand mehr wusste welche information wohin gehört. deshalb wird das bei uns so nicht mehr gehandhabt. deshalb müssen wir jetzt in den nächsten wochen mal überlegen was wir da em besten machen können. die umstellen auf ein datagrid wirds dann wohl doch letztendlich werden. momentan hat diese problematik aber eher eine sehr niedrige priorität und deshalb wrid sich das eh noch ziemlich lange hinziehen, bis wir das dann gelöst haben. Bearbeitet 29. Oktober 2008 von aline234 Zitieren
Guybrush Threepwood Geschrieben 29. Oktober 2008 Geschrieben 29. Oktober 2008 Hab mir die ListView gerade mal angeschaut weil ich da bisher noch nichts mit gemacht hab und ich denke auch da wäre es das Vernünftigste auf das DataGridView umzusteigen sobald sich die Möglichkeit bietet. Zitieren
xk4fu Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 hi, der code braucht nen ListView namens ListView1 und nen button namens Button1 damit kannst du mal testen, wie man eine spalte ausblenden kann; das adden und removen löscht nicht die daten (das willst du da, oder ) Dim c1 As New System.windows.Forms.ColumnHeader Dim c2 As New System.windows.Forms.ColumnHeader Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ListView1.View = View.Details ListView1.FullRowSelect = True c1.Text = "fall" c1.Width = 100 c2.Text = "tttttttesssssssssst" c2.Width = 200 With ListView1.Columns .Add(c1) .Add(c2) End With With ListView1.Items With .Add("test") .SubItems.Add("hallo") End With End With ListView1.Columns.Remove(c2) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListView1.Columns.Add(c2) End Sub Zitieren
Guybrush Threepwood Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 Das ist ja das was sie in Post #3 beschrieben hat Zitieren
xk4fu Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 ok, nochmal bisl überarbeitet notwendig: listview und 3 buttons wenn du auf button 3 klickst, wirst du bemerken, dass die daten dieser spalte noch verfügbar sind, obwohl die spalte ausgeblendet ist Dim c1 As New System.windows.Forms.ColumnHeader Dim c2 As New System.windows.Forms.ColumnHeader Dim c3 As New System.windows.Forms.ColumnHeader Dim iIndex As Integer Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ListView1.View = View.Details ListView1.FullRowSelect = True c1.Text = "s1" c1.Width = 50 c2.Text = "s2" c2.Width = 50 c3.Text = "s3" c3.Width = 50 With ListView1.Columns .Add(c1) .Add(c2) .Add(c3) End With With ListView1.Items With .Add("1") .SubItems.Add("2") .SubItems.Add("3") End With End With End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListView1.Columns.Insert(iIndex, c2) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click iIndex = ListView1.Columns.IndexOf(c2) ListView1.Columns.Remove(c2) End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click MessageBox.Show(ListView1.Items(0).SubItems(1).Text) End Sub Zitieren
aline234 Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 find ich ja nett, dass du die die ganze arbeit gemacht hast, aber wie guybrush schon erwähnte, war mir das vorher schon klar (--> siehe mein 3ter post in diesem thread). das ist aber in unserem fall etwas ungünstig, weil man dann bei verschiedenen funktionalitäten des listviews (sortieren z.B.) an 2 stellen gleichzeiten rumwerkeln muss. momentan gucken wir gerade ob eine umstellung auf das data grid an jeder stelle funktionieren wird und zur not müssne wir eben damit leben, dass der benutzer die spalte wieder breiter ziehen kann. trotzdem aber danke für die vielen tipps und so Zitieren
xk4fu Geschrieben 30. Oktober 2008 Geschrieben 30. Oktober 2008 (bearbeitet) die listview funktionalität an sich und die datenhaltung bleibt doch komplett erhalten; das einzige was du machen musst, ist dir den index des column zu merken, damit du ihn wieder an korrekter position einfügen kannst, da, wenn ein column removed wurde, dieser beim adden wieder an die letzte position hinzugefügt wird (beim insert kann man einen index angeben), aber die daten der zeilen der entsprechenden spalte noch an der selben position bleiben soll heißen: bsp: spalte 1 | 2 | 3 wert: a | b | c löscht du spalte 2 und fügst sie wieder ein schaut das so aus( wohlgemerkt nur bei add, mit insert gehts) spalte 1 | 3 | 2 wert: a | b | c das bsp zeigt aber, dass die werte der zeilen völlig unberührt vom remove bleiben, d.h. du kannst weiterhin sortieren usw und die ausgeblendete spalte sortiert sich dabei mit (siehe code) Dim c1 As New System.windows.Forms.ColumnHeader Dim c2 As New System.windows.Forms.ColumnHeader Dim c3 As New System.windows.Forms.ColumnHeader Dim iIndex As Integer Private m_Sort As SortOrder = SortOrder.Descending Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ListView1.View = View.Details ListView1.FullRowSelect = True c1.Text = "s1" c1.Width = 50 c2.Text = "s2" c2.Width = 50 c3.Text = "s3" c3.Width = 50 With ListView1.Columns .Add(c1) .Add(c2) .Add(c3) End With With ListView1.Items With .Add("1") .SubItems.Add("2") .SubItems.Add("3") End With With .Add("2") .SubItems.Add("5") .SubItems.Add("6") End With With .Add("3") .SubItems.Add("3") .SubItems.Add("2") End With End With End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListView1.Columns.Insert(iIndex, c2) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click iIndex = ListView1.Columns.IndexOf(c2) ListView1.Columns.Remove(c2) End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click MessageBox.Show(ListView1.Items(0).SubItems(1).Text) End Sub Private Sub ListView1_ColumnClick(ByVal sender As Object, _ ByVal e As System.Windows.Forms.ColumnClickEventArgs) _ Handles ListView1.ColumnClick Select Case e.Column Case 0 ListView1.ListViewItemSorter = Nothing ListView1.Sorting = m_Sort Case 1 ListView1.ListViewItemSorter = Nothing ListView1.Sorting = m_Sort Case 2 ListView1.ListViewItemSorter = Nothing ListView1.Sorting = m_Sort End Select If m_Sort = SortOrder.Ascending Then m_Sort = SortOrder.Descending ElseIf m_Sort = SortOrder.Descending Then m_Sort = SortOrder.Ascending End If End Sub Bearbeitet 30. Oktober 2008 von xk4fu Zitieren
aline234 Geschrieben 30. Oktober 2008 Autor Geschrieben 30. Oktober 2008 achso! ich versteh zwar grade nich, warum sich die spalte, die ja eigentlich nich mehr bestandteil des listviews is, mitsortiert, aber ich werd mich nich beschweren danke Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.