1

我的问题是我无法从我的 XML 文件中检索颜色并将其加载到 datagridview 中(在 EVENT:FORMTES3_LOAD 上)。应用程序没有失败,但我的 Datagridview 的显示变得不规则/异常。

注意:组件是windows窗体(1个单元-“FormTes3”),colordialog(1个单元-“ColorDialog1”)和datagridview(1个单元-“Datagridview1”)

以下是我的完整源代码:

Imports System
Imports System.IO
Imports System.Xml

Public Class FormTes3

Dim rowClicked As Integer
Dim colorName As String

Dim Doc As New XmlDocument


Private Sub FormTes3_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    Doc.AppendChild(Doc.CreateElement("DataGridView"))

    ' Populate the grid
    DataGridView1.Columns.Add("Column1", "Column 1")
    DataGridView1.Columns.Add("Column2", "Column 2")
    DataGridView1.Columns.Add("Column3", "Column 3")

    DataGridView1.Rows.Add("A", "B", "C")
    DataGridView1.Rows.Add("A", "B", "C")
    DataGridView1.Rows.Add("A", "B", "C")
    DataGridView1.Rows.Add("A", "B", "C")
    DataGridView1.Rows.Add("A", "B", "C")


    If System.IO.File.Exists((Application.StartupPath + "\test.xml")) Then
        Dim row As Integer
        'Dim column As Integer
        Dim backColor As String
        Dim docLoad As New XmlDocument

        docLoad.Load((Application.StartupPath + "\test.xml"))

        For Each node As XmlNode In docLoad.SelectNodes("//Row")
            row = Convert.ToInt32(node.Attributes("rowID").InnerText)
            MsgBox(row)

            backColor = node.FirstChild.Attributes("BackColor").InnerText
            MsgBox(backColor)

            DataGridView1.Rows(row).DefaultCellStyle.BackColor = ColorTranslator.FromHtml(backColor)

          Next

    End If

End Sub


Private Function GetHexColor(ByVal colorObj As System.Drawing.Color) As String
    Return "#" & Hex(colorObj.R) & Hex(colorObj.G) & Hex(colorObj.B)
End Function


Private Sub CreateNewColorElement(ByVal rowID As Integer)

    'Create Row Node & ID Attribute
    Dim rowNode As XmlNode = Doc.CreateElement("Row")
    Dim idAttribute As XmlAttribute = Doc.CreateAttribute("rowID")
    idAttribute.Value = rowID.ToString
    rowNode.Attributes.Append(idAttribute)

    'Column Node
    Dim columnNode As XmlNode = Doc.CreateElement("Profile")

    'BackColor
    Dim backColor As XmlAttribute = Doc.CreateAttribute("BackColor")
    backColor.Value = colorName
    columnNode.Attributes.Append(backColor)

    rowNode.AppendChild(columnNode)
    Doc.DocumentElement.AppendChild(rowNode)

End Sub


Private Sub DataGridView1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseUp

    Dim result As DialogResult

    If e.Button = Windows.Forms.MouseButtons.Right Then

        rowClicked = DataGridView1.HitTest(e.Location.X, e.Location.Y).RowIndex
        MsgBox("row Click: " & rowClicked)

        result = ColorDialog1.ShowDialog()

        If result = DialogResult.OK Then

            Dim rowIndex As Integer = rowClicked

            DataGridView1.Rows(rowClicked).DefaultCellStyle.BackColor = ColorDialog1.Color   'Running Well

            colorName = GetHexColor(ColorDialog1.Color)

            'If (Not (GlobalVariables.ColorStr) Is Nothing) Then
            CreateNewColorElement(rowIndex) 
            'End If

        ElseIf result = DialogResult.Cancel Then

            Return

        End If

    End If

End Sub


Private Sub FormTes3_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    Dim saveFile As SaveFileDialog = New SaveFileDialog
    saveFile.InitialDirectory = Application.StartupPath
    saveFile.Filter = "XML files (*.xml)|*.xml"

    Dim dr As DialogResult = DialogResult.Yes

    If (MessageBox.Show("Do you want to save XML Style?", "Grid Style", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = dr) Then

        If (saveFile.ShowDialog = DialogResult.OK) Then
            Doc.Save(saveFile.FileName)
        End If

    End If

End Sub

End Class
4

0 回答 0