Asp.net Gridview中未正确显示字符串

Asp.net Gridview中未正确显示字符串,asp.net,vb.net,gridview,datatable,Asp.net,Vb.net,Gridview,Datatable,我的gridview有一个问题,每次通过for-each循环时,我都会在字符串的末尾追加内容,我尝试在它再次通过循环之前删除追加内容(如下面的代码所示),但它似乎不起作用: Private Sub LoadData() conn = New SqlConnection(connectionString) ds = New DataSet("Accounts") da = New SqlDataAdapter("SELECT [branch], [no] , [surna

我的gridview有一个问题,每次通过for-each循环时,我都会在字符串的末尾追加内容,我尝试在它再次通过循环之前删除追加内容(如下面的代码所示),但它似乎不起作用:

Private Sub LoadData()

    conn = New SqlConnection(connectionString)
    ds = New DataSet("Accounts")
    da = New SqlDataAdapter("SELECT [branch], [no] , [surname], [name], [type], [sub], [totalAmount], loc, locstatus, HoldCalc, odTimes " & _
                            "FROM [DmdOD]", conn)

    conn.Open()

    da.FillSchema(ds, SchemaType.Source, "Accounts")
    da.Fill(ds, "Accounts")

    conn.Close()

    Dim loc As String
    Dim hold As String
    Dim holdString As String
    Dim odString As String

    Dim tblAccounts As DataTable
    tblAccounts = ds.Tables("Accounts")

    'Clone table in order to manipulate data
    Dim dtClone As DataTable = tblAccounts.Clone()
    dtClone.Columns("loc").DataType = System.Type.GetType("System.String")
    dtClone.Columns("odtimes").DataType = System.Type.GetType("System.String")
    dtClone.Columns("HoldCalc").DataType = System.Type.GetType("System.String")

    'Perform logic on fields before binding to gridview

    tblAccounts = DeleteDuplicateFromDataTable(tblAccounts, "no")

    For Each dr As DataRow In tblAccounts.Rows
        dtClone.ImportRow(dr)
        For Each drClone As DataRow In dtClone.Rows
            loc = drClone.Item("loc")
            odString = drClone.Item("odtimes")
            hold = drClone.Item("HoldCalc")
            If loc = "0.0000" Then
                loc = " "
                drClone.Item("loc") = loc
            End If

            'hold = CType(drClone.Item("HoldCalc"), Decimal)
            holdString = hold

            If loc <> "0.0000" AndAlso holdString < "0.0000" Then
                holdString &= " EX"
                drClone.Item("HoldCalc") = holdString
            ElseIf loc = "0.000" AndAlso hold < 0 Then
                holdString &= " OD"
                drClone.Item("HoldCalc") = holdString
            Else
                holdString = ""
                drClone.Item("HoldCalc") = holdString
            End If

            If odString = "0" Then
                odString = ""
                drClone.Item("odtimes") = odString
            End If

            If holdString.Length > 2 AndAlso (holdString.Contains(" EX EX") OrElse holdString.Contains(" OD OD")) Then
                drClone.Item("HoldCalc") = holdString.Substring(0, holdString.Length - 2)
            End If
        Next
    Next



    dtClone.AcceptChanges()


    GVAccounts.DataSource = dtClone
    GVAccounts.DataBind()

End Sub
专用子加载数据()
conn=新的SqlConnection(connectionString)
ds=新数据集(“账户”)
da=新的SqlDataAdapter(“选择[分支]、[编号]、[姓氏]、[名称]、[类型]、[子类型]、[总金额]、loc、locstatus、HoldCalc、odTimes”&_
“来自[国防部]”,康涅狄格州)
康涅狄格州公开赛
da.FillSchema(ds,SchemaType.Source,“Accounts”)
da.填写(ds,“账目”)
康涅狄格州关闭
作为字符串的Dim loc
以字符串的形式保持
将字符串设置为字符串
将字符串设置为字符串
Dim tblAccounts作为数据表
tblAccounts=ds.表格(“账户”)
'克隆表以操作数据
Dim dtClone As DataTable=tblAccounts.Clone()
dtClone.Columns(“loc”).DataType=System.Type.GetType(“System.String”)
dtClone.Columns(“odtimes”).DataType=System.Type.GetType(“System.String”)
dtClone.Columns(“HoldCalc”).DataType=System.Type.GetType(“System.String”)
'在绑定到gridview之前对字段执行逻辑
tblAccounts=DeleteDuplicateFromDataTable(tblAccounts,“否”)
对于tblAccounts.Rows中的每个dr As数据行
dtClone.ImportRow(dr)
对于dtClone.Rows中作为DataRow的每个drClone
loc=drClone.项目(“loc”)
odString=drClone.Item(“odtimes”)
hold=drClone.Item(“HoldCalc”)
如果loc=“0.0000”,则
loc=“”
drClone.项目(“loc”)=loc
如果结束
'hold=CType(drClone.Item(“HoldCalc”),十进制)
保持字符串=保持
如果loc“0.0000”和ALSO holdString<“0.0000”,则
holdString&=“EX”
drClone.Item(“HoldCalc”)=holdString
ElseIf loc=“0.000”并保持<0
holdString&=“OD”
drClone.Item(“HoldCalc”)=holdString
其他的
holdString=“”
drClone.Item(“HoldCalc”)=holdString
如果结束
如果odString=“0”,则
odString=“”
drClone.Item(“odtimes”)=odString
如果结束
如果holdString.Length>2且也是(holdString.Contains(“EX”)或lse holdString.Contains(“OD”)),则
drClone.Item(“HoldCalc”)=holdString.Substring(0,holdString.Length-2)
如果结束
下一个
下一个
dtClone.AcceptChanges()
GVAccounts.DataSource=dtClone
GVAccounts.DataBind()
端接头
每次通过循环时,它都只是附加到字符串的末尾,尽管在满足条件的情况下它会进入If语句,但最终的输出仍然不正确。我想要的输出应该只在价格后有EX或OD,但它在最后输出EX很多次,我不想要这个…我希望这是有意义的


在任何情况下,我都不知道如何解决这个问题,而谷歌对此没有任何帮助,任何帮助都将不胜感激。

它将多次追加,这很有意义,因为您在克隆中多次循环行

tblAccounts
中的行添加到
dtClone
后,您将遍历
dtClone
中的所有行,并对新行及其之前的所有行执行操作,因此以多次追加字符串结束是正常的


为什么不直接从
tblAccounts
中克隆行,对其进行处理,然后将其添加到
dtClone

我需要更改行的数据类型以进行处理,这就是我在那里做的。由于该行已在tblAccounts中建立,因此我必须克隆它以更改值。或者根据我的理解。是的,这很好,但您在“dtClone”中的所有行中循环了很多次,这是不必要的。每次你加上“EX”的时候,这就是为什么你会以错误的格式结束。我只是不知道如何按照你的建议去做,如果可以,您认为您可以提供一个代码示例吗?只需取出第一个循环,执行类似于
dtClone=tblAccounts.Clone
的操作,然后在
dtClone
的行中循环并处理。它也应该快得多。或者,不要循环执行
dtClone
,而是执行
clonedr.Clone()
,处理并添加到
dtClone