【问题标题】:DataGridView using Structure and LINQ to order txt fileDataGridView 使用结构和 LINQ 来订购 txt 文件
【发布时间】:2016-11-22 02:58:44
【问题描述】:

我的程序有问题,我能够将所有数据拉入网格并放入正确的列/行。但是,我相信我的 LINQ 查询是错误的,它没有正确划分第三列并插入正确的数据。我的结果:https://gyazo.com/0f307a10dff4c015a361708ecd53c0e9,正确结果:https://gyazo.com/99e9915bf4ee4e4aa3fb7f2144da1f94。我可以在我的代码中更改什么以将其从 0 更改为正确的百分比?感谢所有回复!它从中提取的文本文件中的另一个示例是“American Express,AXP,NYSE,Consumer Finance,90.73,93.04,5.56,1.01”

    Public Class frmDow

Structure stock
    Dim company As String
    Dim symbol As String
    Dim exchange As String
    Dim industry As String
    Dim price2013 As Double
    Dim price2014 As Double
    Dim earningsPerShare As Double
    Dim dividend As Double
End Structure

Private Sub btnDetermine_Click(sender As Object, e As EventArgs) Handles btnDetermine.Click

    Dim inputData() As String = IO.File.ReadAllLines("DOW2014.txt")
    Dim stockData(29) As stock
    Dim line, data() As String
    Dim yield As Double

    For i As Integer = 0 To (inputData.Length - 1)
        line = inputData(i)
        data = line.Split(","c)
        stockData(i).company = data(0)
        stockData(i).symbol = data(1)
        stockData(i).price2014 = data(5)
        stockData(i).dividend = data(7)
    Next

    Dim stockQuery = From stock In stockData
                     Where yield = data(5) / data(7)
                     Order By yield Descending
                     Select stock

    For Each stockName In stockQuery
        dgvResults.DataSource = stockData
    Next

    For Each s As stock In stockData
        dgvResults.Rows.Add(s.company, s.symbol, yield)
    Next

End Sub

End Class

【问题讨论】:

  • 首先,为什么要使用结构? stock 类型(无论哪种方式都应该命名为“Stock”)应该是一个类。我建议更改它并查看您的问题是否消失,因为某些问题可能是由于人们没有正确理解使用值类型的含义而引起的。

标签: vb.net


【解决方案1】:

查看您的代码,问题并没有随着更改而消失。问题是您实际上从未为yield 设置值,因此它只能为零。您需要做的是为您的 LINQ 查询中的每个项目选择一个屈服值,例如

Dim stockQuery = From stock In stockData
                 Where yield = data(5) / data(7)
                 Order By yield Descending
                 Select New With {.Company = stock.company,
                                  .Symbol = stock.Symbol,
                                  .Yield = stock.price2014 / stock.dividend}

dgvResults.DataSource = stockQuery.ToList()

请注意,DataSource 仅设置一次,您无需手动添加任何行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多