0

我的帖子与 Visual Basic Windows 窗体程序有关。我有一个 datagridview(称为:Device_LabelsDataGridView),它在对话框中混合了可见和不可见的列。

我想导出标题为“位置”(隐藏)和“数据”(可见)的特定两列,但错过了名为“描述”的中间列。此时,进一步向下提供的代码导出我的数据像这样(就像逗号一样):

位置、描述、数据
位置、描述、数据
位置、描述、数据
继续…

但我想要(同样,用逗号原样)

位置,数据
位置,数据
位置,数据
继续…

下面是我尝试使用的代码,但无法得到我想要的。

Dim writer As StreamWriter = New StreamWriter("C:\GridExport.txt")
    If (DeviceLabels.Device_LabelsDataGridView.Rows.Count > 0) Then
        For Each col As DataGridViewColumn In DeviceLabels.Device_LabelsDataGridView.Columns
        Next
    End If

    For Each row As DataGridViewRow In DeviceLabels.Device_LabelsDataGridView.Rows
        'If Not omitIndices.Contains(row.Index) Then
        For Each cell As DataGridViewCell In row.Cells
            If (cell.OwningColumn.Index = (DeviceLabels.Device_LabelsDataGridView.Columns.Count - 1)) Then
                If (Not (cell.Value) Is Nothing) Then
                    writer.WriteLine(cell.Value.ToString)
                Else
                    writer.WriteLine("")
                End If

            ElseIf (Not (cell.Value) Is Nothing) Then
                writer.Write(String.Concat(cell.Value.ToString, ","))
            Else
                writer.Write(String.Concat("", ","))
            End If
        Next
        'End If
    Next

    writer.Close()

End Sub 

有人可以帮忙吗?我的头发不多了!我是VB新手,经验0,也找不到任何包含导出可见和不可见列的相关示例。

我也需要文本文件,所以不能使用其他格式。我正在创建的程序是一个 EEPROM 编程器。一旦这个文本导出工作,我就可以处理我的程序的下半部分——将文件发送到我的 EEPROM 处理程序。

4

1 回答 1

0

如果您只是在寻找值,我发现使用旧 X,Y 访问 DGV 很容易编码:

这是我的测试用例:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim sLine As String = ""
    Dim sLines As String = "" ' added
    For iRow As Integer = 0 To Device_LabelsDataGridView.RowCount - 1
        sLine = ""
        For iCol As Integer = 0 To Device_LabelsDataGridView.ColumnCount - 1
            ' test header text: Device_LabelsDataGridView.Columns(iCol).HeaderText
            If iCol = 0 Or iCol = 1 Then
                sLine &= Device_LabelsDataGridView(iCol, iRow).Value.ToString & "," 
            End If
        Next
        sLines &= sLine.Substring(0, sLine.Length - 1) & vbCrLf
    Next
    My.Computer.FileSystem.WriteAllText("C:\Test.txt", sLines, True) ' generated from right click, snippets
End Sub
Private Sub Form5_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Device_LabelsDataGridView.Rows.Add({"1a", "1b", "1c"})
    Device_LabelsDataGridView.Rows.Add({"2a", "2b", "2c"})
    Device_LabelsDataGridView.Rows.Add({"3a", "", ""})
    Device_LabelsDataGridView.Rows.Add({"4a", "4b", "4c"})
End Sub

我在 DGV 中添加了三列并设置了 2nd Visible=False 并关闭了能够添加行的选项(单击 DGV 右上角的小 >。)

该列是否可见没有任何区别。

我只是测试列索引以查看是否应该包含该列。您可以测试 HeaderText 的列或其他属性。

.Cell.Value.Tostring 可以处理空单元格。

于 2013-05-06T20:16:07.957 回答