Announcement

Collapse
No announcement yet.

DataGridTableStyle verwirft spalten in DataGrid

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataGridTableStyle verwirft spalten in DataGrid

    Hallo Leute!

    Ich versuche über einen DataGridTableStyle gewisse Zeilen in einem Datagrid auszublenden. In der Theorie sollte es ja so funktionieren, dass man erstmal DataGridTableStyle erstellt und diesem die Columns zuweißt, die man später in seinem Datagrid sehen will (MappingName muss natürlich gestzt werden). Bei mir ist es so, dass komischerweiße von mehreren Spalten, die ich übernehmen will nur die Spalte "ID" angezeigt wird. Zu bemerken ist vielleicht nocht, dass ich auf dem .NET Compact Framework entwickle.

    Hier mal der Code für die Initialisierung meiner "Originalen-DataTable":
    Code:
    Dim DS_Tbl_Grabmangel As New DataSet
    
            DS_Tbl_Grabmangel.Tables.Add(New DataTable)
            DS_Tbl_Grabmangel.Tables(0).Columns.Add("ID")
            DS_Tbl_Grabmangel.Tables(0).Columns.Add("tbl_Grab_ID")
            DS_Tbl_Grabmangel.Tables(0).Columns.Add("tblxx_Mangel_ID")
            DS_Tbl_Grabmangel.Tables(0).Columns.Add("tblkett_Grabmangel_MangelBezeichnung")
            DS_Tbl_Grabmangel.Tables(0).Columns.Add("tblxx_MangelartBezeichnung")
            DS_Tbl_Grabmangel.Tables(0).Columns.Add("LetztePruefung")
            DS_Tbl_Grabmangel.Tables(0).Columns.Add("Behoben")
    Soweit, so gut...
    Hier also mal der Part mit dem DataGridTableStyle

    Code:
     Private Sub createDgStyle()
            DS_tbl_Grabmaengel.Tables(0).TableName = "tbl_Grabmangel"
    
            '#### TALBE STYLE FESTLEGEN ###
            Dim MyDataGridTableStyle As New DataGridTableStyle
            MyDataGridTableStyle.MappingName = "tbl_Grabmangel"
            MyDataGridTableStyle.GridColumnStyles.Clear()
    
            'Column ID
            Dim idCol As New DataGridTextBoxColumn
            idCol.MappingName = "ID"
            idCol.HeaderText = "ID"
            idCol.Width = 150
            MyDataGridTableStyle.GridColumnStyles.Add(idCol)
            
    
            'Column tblkett_Grabmangel_MangelBezeichnung
            Dim tblkett_Grabmangel_MangelBezeichnungCol As New DataGridTextBoxColumn
            tbl_Grab_IDCol.MappingName = "tblkett_Grabmangel_MangelBezeichnung"
            tbl_Grab_IDCol.HeaderText = "tblkett_Grabmangel_MangelBezeichnung"
            tbl_Grab_IDCol.Width = 150
            MyDataGridTableStyle.GridColumnStyles.Add(tblkett_Grabmangel_MangelBezeichnungCol)
    
            'Column tblxx_MangelartBezeichnung
            Dim tblxx_MangelartBezeichnungCol As New DataGridTextBoxColumn
            tbl_Grab_IDCol.MappingName = "tblxx_MangelartBezeichnung"
            tbl_Grab_IDCol.HeaderText = "tblxx_MangelartBezeichnung"
            tbl_Grab_IDCol.Width = 150
            MyDataGridTableStyle.GridColumnStyles.Add(tblxx_MangelartBezeichnungCol)
    
            'Column Behoben
            Dim BehobenCol As New DataGridTextBoxColumn
            tbl_Grab_IDCol.MappingName = "Behoben"
            tbl_Grab_IDCol.HeaderText = "Behoben"
            tbl_Grab_IDCol.Width = 150
            MyDataGridTableStyle.GridColumnStyles.Add(BehobenCol)
    
            Try
                'TableStyle zu DataGrid hinzuefuegen
                dgMaengel.TableStyles.Clear()
                dgMaengel.TableStyles.Add(MyDataGridTableStyle)
            Catch ex As Exception
                MsgBox(ex.Message & vbCrLf & ex.StackTrace(), MsgBoxStyle.Critical)
            End Try
            '### TABLESTYLE FESTGELEGD ###
        End Sub
    Ich sitze hier schon ewig rum und komme einfach nicht auf das Problem *confused*. Vielleicht hat ja jemand von euch eine zündende Idee.

    Gruß Sebbi

  • #2
    Hallo,

    lässt sich das Problem in einem neuen (minimalen) Testprogramm reproduzieren, wenn dort nur 2 Spalten mit einer Breite von jeweils 50 angezeigt werden?

    Comment


    • #3
      Hallo Andreas,

      erstmal vielen Dank für deine Antwort! Also habe jetzt mal ein ganz triviales Testprogramm geschrieben, einziger unterschied... habe es - ausversehen - als PPC 2005, anstatt PPC2003 Projekt erstellt, was ja aber eigentlich nicht relevant sein sollte. Also der Code funktioniert so, wie er es eigentlich auch sollte! Spalte Nachname wird angezeigt. Sobald ich die Spalte "Vorname" mit in den TableStyle nehme ist sie auch vorhanden im DataGrid.

      Code:
      Imports System.Data
      
      Public Class Form1
      
          Public Sub init()
      
              'Table anlegen
              Dim DT_Test As New DataTable
              DT_Test.TableName = "test"
      
              DT_Test.Columns.Add("Nachname")
              DT_Test.Columns.Add("Vorname")
      
              'Rows hinzufügen
              Dim row1 As DataRow = DT_Test.NewRow()
              row1.Item("Nachname") = "Maier"
              row1.Item("Vorname") = "Fritz"
              DT_Test.Rows.Add(row1)
      
              Dim row2 As DataRow = DT_Test.NewRow()
              row2.Item("Nachname") = "Schulze"
              row2.Item("Vorname") = "Herbert"
              DT_Test.Rows.Add(row2)
      
              'TableStyle erzeugen
              Dim myTableStyle As New DataGridTableStyle
              myTableStyle.GridColumnStyles.Clear()
              myTableStyle.MappingName = "test"
      
              'Column Nachname
              Dim NachnameCol As New DataGridTextBoxColumn
              NachnameCol.MappingName = "Nachname"
              NachnameCol.HeaderText = "Nachname"
              NachnameCol.Width = 50
              myTableStyle.GridColumnStyles.Add(NachnameCol)
      
              ''... Vorname wird ausgelassen, um die Spalte zu verstecken
              ''Column Nachname
              'Dim VornameCol As New DataGridTextBoxColumn
              'VornameCol.MappingName = "Vorname"
              'VornameCol.HeaderText = "Vorname"
              'VornameCol.Width = 50
              'myTableStyle.GridColumnStyles.Add(VornameCol)
      
              Try
                  DataGrid1.TableStyles.Clear()
                  DataGrid1.TableStyles.Add(myTableStyle)
                  DataGrid1.DataSource = DT_Test
              Catch ex As Exception
                  MsgBox(ex.Message & vbCrLf & ex.StackTrace(), MsgBoxStyle.Critical)
              End Try
      
            
      
      
      
          End Sub
      
          Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
              Me.init()
          End Sub
      End Class
      Es ist wirklich zum Mäuse melken! Was läuft nur schief . Ich kann es einfach nicht nachvollziehen. Bin wirklich für jede Hilfe dankbar. Vielleicht hast Du, Andreas, ja auch noch irgendeine Idee/Vermutung... Naja, bin mal weiter probieren!

      P.S.: Falls jemand eine anderen möglichkeit Spalten auszublenden, ausser die Breite auf 0 zu stellen, ist mir das genauso recht.

      Gruß Sebbi

      Comment


      • #4
        Erstmal Entschulding, wegen dem Doppelpost, aber so ist es denke ich übersichtlicher!

        Habe mal etwas ausprobiert. Werde mal nur die Relevanten Auschnitte des Sources hier hineinkopieren.

        #1: Ich habe nur die Splate "ID" in den TableStyle hineinkopiert.

        Code:
            'Column ID
                Dim idCol As New DataGridTextBoxColumn
        
                idCol.MappingName = "ID"
                idCol.HeaderText = "ID"
                idCol.Width = 50
                MyDataGridTableStyle.GridColumnStyles.Add(idCol)
        Fazit : Nur die Splate ID zu sehen in DataGrid, Prima!

        #2: Die Splate "ID" bekommt im TableStyle gesellschaft von der Spalte "Tbl_Grab_id"

        Code:
         'Column ID .........
        
         'Column tbl_Grab_ID
                Dim tbl_Grab_IDCol As New DataGridTextBoxColumn
                tbl_Grab_IDCol.MappingName = "tbl_Grab_ID"
                tbl_Grab_IDCol.HeaderText = "tbl_Grab_ID"
                tbl_Grab_IDCol.Width = 50
                MyDataGridTableStyle.GridColumnStyles.Add(tbl_Grab_IDCol)
        Faizt: Beide als einziges im DataGrid vorhanden. Super!

        #3: Nun habe ich noch die Splate "tblxx_Grab_id" hinzugefügt.

        Code:
          'Column ID.....
        
        'Column tbl_grab_id......
        
           'Column tblxx_Mangel_ID
                Dim tblxx_Mangel_IDCol As New DataGridTextBoxColumn
                tbl_Grab_IDCol.MappingName = "tblxx_Mangel_ID"
                tbl_Grab_IDCol.HeaderText = "tblxx_Mangel_ID"
                tbl_Grab_IDCol.Width = 50
                MyDataGridTableStyle.GridColumnStyles.Add(tblxx_Mangel_IDCol)
        Faizt: "ID" und "tblxx_Mangel_id" im DataGrid vorhanden. Komisch! Wo ist nur "tbl_Grab_id" hinverschwunden?

        #4: So, nun mal noch die Spalte "LetztePruefung" hinzugefügt

        Code:
          'Column ID.....
        
        'Column tbl_grab_id......
        
           'Column tblxx_Mangel_ID..........
        
        'Column LetztePruefung
                Dim LetztePruefungCol As New DataGridTextBoxColumn
                tbl_Grab_IDCol.MappingName = "LetztePruefung"
                tbl_Grab_IDCol.HeaderText = "LetztePruefung"
                tbl_Grab_IDCol.Width = 50
                MyDataGridTableStyle.GridColumnStyles.Add(LetztePruefungCol)
        Faizt: Wer hätte es gedacht?! "ID" und "letztePrüfung" erscheinen im DataGrid.

        #5: Jetzt könnte man ja meinen, dass immer der erste und der letzte Eintrag angezeigt werden, ist aber falsch. Ich habe nun "tbl_grab_id" und "id" vertauscht, so dass es im endeffekt so aussieht:
        Code:
        'Column tbl_grab_id......
        
        'Column ID.....
        
        'Column tblxx_Mangel_ID..........
        
        'Column LetztePruefung
        Faizt: Boa! Nun steht im DataGrid "LetztePrüfung an erster Stelle und "ID" am Schluss, "ID" war aber die ganze zeit am Anfang und ist nun ganz nach hinten gerutscht. Ganz komische Sache.

        Hoffe mal euch nicht verwirrt zu habe. Vielleicht macht jemandem das die Sache aber klarer.

        Gruß Sebbi

        Comment

        Working...
        X