【发布时间】:2013-02-12 13:36:40
【问题描述】:
我有以下程序,效果很好。我唯一遇到的问题是 CompNames 列表 有超过 1 条记录。我正在尝试将 String.Join 与 vbCrLf 一起使用,但它不起作用。
任何人都有任何想法或我可以使用的替代方案。
Public Sub gvTeamList_OnRowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
Dim TeamID As Integer
If e.Row.RowType = DataControlRowType.DataRow Then
TeamID = DataBinder.Eval(e.Row.DataItem, "TeamID")
Dim sSQL As String
sSQL = "SELECT C.CompetitionName, CTT.TeamID " & _
"FROM tblCompetition C " & _
"left join tblCompetitionToTeam CTT on C.CompetitionID = CTT.CompetitionID " & _
"left join tblTeam T on CTT.TeamID = T.TeamID " & _
"where CTT.TeamID = " & TeamID
Dim dr = DataClass.GetDataReader(sSQL)
Dim bRows As Boolean = dr.HasRows
Dim CompNames As New List(Of String)
While dr.Read
CompNames.Add(dr("CompetitionName"))
End While
Dim Name As String
If CompNames.Count > 0 Then
For Each Name In CompNames
e.Row.Cells(5).Text = String.Join(vbCrLf, CompNames.ToArray)
Next
End If
'e.Row.Cells(5).Text =
e.Row.Cells(5).ForeColor = Drawing.Color.Yellow
e.Row.Cells(5).BackColor = Drawing.Color.DarkBlue
dr.Close()
End If
End Sub
我也尝试过 Environment.NewLine,但也没有用
【问题讨论】:
-
定义“不起作用”。
-
可以查看问题here
-
看来这是一个
WebForms应用程序,所以我添加了标签。请尝试在您的标签中包含有关应用程序环境(Windows 应用程序与 Web)的信息,因为这是一个重要的区别。 -
我假设
OnRowDataBound是GridView的RowDataBound处理程序。请注意,GridView中的每一行都会调用它,而不仅仅是一次。所以你的代码至少效率不高。 -
@TimSchmelter:我认为 OP 知道 - 查询的条件也会随每一行发生变化 (
TeamID),因此数据与每个特定行相关。但是可以通过一次将整个表加载到内存中来改进它,然后在内存中的集合中查询特定于团队的数据。