DataGridView,列为字符串,列为整数

时间:2019-01-22 10:21:43

标签: vb.net

我有一个包含5列(地点,位置,大小,容量,租用成本)的datagridview。 我从文本文件中获取数据。一切正常,除了我希望用户能够通过单击列标题来对容量和租金进行排序。但是,问题在于,由于编码方式的原因,所有列都是字符串。我需要的是将前三列作为字符串,将后两列作为整数,但是我不确定应该如何修改我的代码以实现此目的。

我目前有以下内容:

Dim row As String() = New String() {vi.venue_name, vi.venue_location, vi.venue_size, String.Format("{0:n0}", vi.venue_capacity), "$" & String.Format("{0:n0}", vi.venue_hirecost)}
DataGridView1.Rows.Add(row)

我该如何修改,以便仅前三列为字符串,而vi.venue_capacity和vi.venue_hirecost列为整数?

编辑:我已经对此进行了排序。是一个非常简单的解决方案。我只是更改了这一行:
Dim row As String() = New String() {vi.venue_name, vi.venue_location, vi.venue_size, String.Format("{0:n0}", vi.venue_capacity), "$" & String.Format("{0:n0}", vi.venue_hirecost)}

至:

 DataGridView1.Rows.Add(vi.venue_name, vi.venue_location, vi.venue_size, vi.venue_capacity, vi.venue_hirecost)`

它现在可以完美运行了! :-)

2 个答案:

答案 0 :(得分:1)

更好的选项将使用数据表来执行相同的操作。请阅读代码中的注释以了解执行的操作。然后将数据表绑定到Datagridview。

''' <summary>
    ''' Sub for 
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub GetData()

        ''Create a Dummy Datatable

        Dim tempCompoTable As DataTable = New DataTable()

        ''Add Columns
        tempCompoTable.Columns.Add(New DataColumn("Venue", Type.GetType("System.String")))
        tempCompoTable.Columns.Add(New DataColumn("Location", Type.GetType("System.String")))
        tempCompoTable.Columns.Add(New DataColumn("Size", Type.GetType("System.String")))
        tempCompoTable.Columns.Add(New DataColumn("Capacity", Type.GetType("System.Double")))
        tempCompoTable.Columns.Add(New DataColumn("Hire", Type.GetType("System.Double")))
        tempCompoTable.Columns.Add(New DataColumn("Cost", Type.GetType("System.Double")))


        Dim lines() As String = IO.File.ReadAllLines("venues.txt")
        For Each line In lines
            If Not line.Trim.Equals("") Then
                Dim strArr() = line.Split(":")

                ''Createnewrow
                Dim drworg As DataRowView = tempCompoTable.DefaultView.AddNew()
                drworg("Venue") = strArr(0)
                drworg("Location") = strArr(1)
                drworg("Size") = strArr(2)
                drworg("Capacity") = Val(Trim(strArr(3) & ""))
                drworg("Hire") = Val(Trim(strArr(4) & ""))
                drworg.EndEdit()

                ''if you want
                'Dim vi As New VenueInfo()
                'vi.venue_name = strArr(0)
                'vi.venue_location = strArr(1)
                'vi.venue_size = strArr(2)
                'vi.venue_capacity = strArr(3)
                'vi.venue_hirecost = strArr(4)


            End If
        Next

        grd.AllowUserToAddRows = False
        grd.DataSource = tempCompoTable

    End Sub

如果您不想直接从数组绑定,可以绑定到value_info,然后遍历它以将行添加到数据表中

答案 1 :(得分:1)

我已经对此进行了排序。是一个非常简单的解决方案。我只是改变了这一行:

Dim row As String() = New String() {
    vi.venue_name, 
    vi.venue_location, 
    vi.venue_size, 
    String.Format("{0:n0}", 
    vi.venue_capacity), 
    "$" & String.Format("{0:n0}", 
    vi.venue_hirecost)
}

收件人:

DataGridView1.Rows.Add(
    vi.venue_name, 
    vi.venue_location, 
    vi.venue_size, 
    vi.venue_capacity, 
    vi.venue_hirecost
)

它现在可以完美运行了! :-)