错误无法通过 VB.NET 中的绑定列表将“System.Collections.Generic.List”类型的对象转换为“System.Collections.Generic.IList”类型

问题描述 投票:0回答:1

我有两个错误,即:

  1. 无法转换类型为“System.Collections.Generic.List`1[VB$AnonymousType_15`7[System.String,System.String,System.String,System.Object,System.Object,System.Object,System. String]]' 键入 'System.Collections.Generic.IList`1

    行代码

    bindingSource = New BindingSource With {.DataSource = New BindingList(Of ItemCards2)(CType(Cardex.ToList(), IList(Of ItemCards2)))}
    
  2. 无法推断常见类型,因为可能有多种类型

    行代码:

    PIQ = If(PIQ <> CInt("0"), PIQ, ""),
    SIQ = If(SIQ <> CInt("0"), SIQ, ""),
    BLC = If(BLC <> CInt("0"), BLC, ""),
    

我的代码有问题吗请指导我

谢谢

Public Class Form2
    Private bindingSource As BindingSource = Nothing
    Private MasterItem,
        PurchaseDetails,
        SalesDetails As New List(Of ItemCards2)
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        LoadLINQ()
    End Sub

    Private Function CreateConnection() As String
        Return ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\TRIAL2.accdb;Persist Security Info=False;")
    End Function
    Private Sub LoadLINQ()
        Const Qry_MST = "SELECT * FROM MASTERITEM"

        Const Qry_PI = "SELECT a.ITEM, '' AS PRODUCTIONNAME, '' AS BRAND, 0 AS LSQ, 0 AS TPIQ, a.QTY AS PIQ, 0 AS TSIQ, 0 AS SIQ, 0 AS TRSQ, 0 AS RSQ, 0 AS TRPQ, 0 AS RPQ,  0 AS BLC FROM (PurchaseDetails a INNER JOIN" &
                       " Purchase b ON a.INVONO = b.INVONO) INNER JOIN" &
                       " CUSTCODE c On b.CUSTCODE = c.CUSTCODE" &
                       " WHERE b.DATEINVO >= CDate('01/01/2024')" &
                       " AND c.GROUP IS NULL"
        Const Qry_SI = "SELECT a.ITEM, '' AS PRODUCTIONNAME, '' AS BRAND, 0 AS LSQ, 0 AS TPIQ,   0 AS PIQ, 0 AS TSIQ, a.QTY AS SIQ, 0 AS TRSQ, 0 AS RSQ, 0 AS TRPQ, 0 AS RPQ, 0 AS BLC FROM (SalesDetails a INNER JOIN" &
                       " Sales b ON a.INVONO = b.INVONO) INNER JOIN" &
                       " CUSTCODE c ON b.CUSTCODE = c.CUSTCODE" &
                       " WHERE b.DATEINVO >= CDATE('01/01/2024')" &
                       " AND c.GROUP IS NULL"
        Using Connection = New OleDbConnection(CreateConnection())
            With Connection
                MasterItem = CType(Connection.Query(Of ItemCards2)(Qry_MST), List(Of ItemCards2))
                PurchaseDetails = CType(Connection.Query(Of ItemCards2)(Qry_PI), List(Of ItemCards2))
                SalesDetails = CType(Connection.Query(Of ItemCards2)(Qry_SI), List(Of ItemCards2))
            End With
        End Using
        Dim Cardex =
           From card In PurchaseDetails.Union(SalesDetails)
           Join mst In MasterItem On card.ITEM Equals mst.ITEM
           Group card By card.ITEM, mst.PRODUCTIONNAME, mst.BRAND Into Group
           Let PIQ = (From x In Group Select x.PIQ).Sum
           Let SIQ = (From x In Group Select x.SIQ).Sum
           Let BLC = (PIQ) - (SIQ)
           Let STATUS = If(BLC < 24, "NEED TO PRODUCE", "")
           Select ITEM,
                  PRODUCTIONNAME,
                  BRAND,
                  PIQ = If(PIQ <> CInt("0"), PIQ, ""),
                  SIQ = If(SIQ <> CInt("0"), SIQ, ""),
                  BLC = If(BLC <> CInt("0"), BLC, ""),
                  STATUS
           Order By ITEM
        bindingSource = New BindingSource With {.DataSource = New BindingList(Of ItemCards2)(CType(Cardex.ToList(), IList(Of ItemCards2)))}
        DataGridView1.DataSource = bindingSource
    End Sub
End Class
vb.net linq ienumerable bindinglist listof
1个回答
0
投票

很难给你答案,因为我们没有看到涉及的类型。但在第二种情况下,你似乎混合了字符串和整数。

SIQ <> CInt("0")
毫无意义。如果你想要一个整数常量,只需写
SIQ <> 0
。如果
PIQ
是整数,则无法返回字符串
""
。如果要将
0
显示为空字符串,请适当设置单元格或文本框的格式。格式将为
"#"
"#,#"
(带千位分隔符),或者如果您有浮点类型
"#,#.##"

© www.soinside.com 2019 - 2024. All rights reserved.