将数组分配给gridview asp.net

时间:2014-10-03 17:53:30

标签: asp.net vb.net gridview

在尝试将数组分配给gridview的数据源时,我无法获取每行的信息。它只显示最后一行并重复它。

数组中的信息来自文本文件

Sub BindGridview()

   If Request.QueryString("show") <> "" Then
        Dim readEmailList As StreamReader = New StreamReader("d:\netdrvs\prs\emaillist\" & Request.QueryString("show"), FileMode.Open)

       While Not readEmailList.EndOfStream

            Dim readData(3) As String
            readData = Split(readEmailList.ReadLine(), vbTab)
            Dim readData2(3) As String
            readData2 = Split(readData(0), "_")

    Dim dt As New System.Data.DataTable()


    dt.Columns.Add("ccode", Type.GetType("System.String"))
    dt.Columns.Add("email", Type.GetType("System.String"))
    dt.Columns.Add("invnum", Type.GetType("System.String"))
    dt.Columns.Add("regards", Type.GetType("System.String"))

    dim i as integer = 0

    For i = LBound(readData) to UBound(readData)
       dt.Rows.Add()
       'dt.Rows(dt.Rows.Count - 1)("ccode") = arrMultiD(i, 0)
       dt.Rows(dt.Rows.Count - 1)("ccode") = readData2(1)
       dt.Rows(dt.Rows.Count - 1)("email") = readData(1)
       dt.Rows(dt.Rows.Count - 1)("invnum") = readData2(0)
       dt.Rows(dt.Rows.Count - 1)("regards") = readData(2)
    Next

            gvarray.DataSource = dt
            gvarray.DataBind()

        End While


        readEmailList.Close()

        ProcessChk.Visible = True
    End If

End Sub

2 个答案:

答案 0 :(得分:0)

你正在每次While次迭代中创建DataTable,这是错误的,把它放在While上面,所以只有一个。然后提取数据。

Dim dt As New DataTable
dt.Columns.Add("ccode", Type.GetType("System.String"))
dt.Columns.Add("email", Type.GetType("System.String"))
dt.Columns.Add("invnum", Type.GetType("System.String"))
dt.Columns.Add("regards", Type.GetType("System.String"))
While Not readEmailList.EndOfStream
   Dim itemsArray As New System.Collections.Generic.List(Of Object)
   Dim readData(3) As String
   readData = Split(readEmailList.ReadLine(), vbTab)
   Dim readData2(3) As String
   readData2 = Split(readData(0), "_")
   itemsArray.Add(readData2(1))
   itemsArray.Add(readData(1))
   itemsArray.Add(readData2(0))
   itemsArray.Add(readData2(1))
   Dim row = dt.NewRow()
   row.ItemArray() = itemsArray.ToArray()
End While
gvarray.DataSource = dt
gvarray.DataBind()

答案 1 :(得分:-1)

   If Request.QueryString("show") <> "" Then
        Dim readEmailList As StreamReader = New StreamReader("d:\netdrvs\prs\emaillist\" & Request.QueryString("show"), FileMode.Open)

   Dim dt As New System.Data.DataTable()

   dt.Columns.Add("ccode", Type.GetType("System.String"))
   dt.Columns.Add("email", Type.GetType("System.String"))
   dt.Columns.Add("invnum", Type.GetType("System.String"))
   dt.Columns.Add("regards", Type.GetType("System.String"))


   While Not readEmailList.EndOfStream

       Dim readData(3) As String
       readData = Split(readEmailList.ReadLine(), vbTab)
       Dim readData2(3) As String
       readData2 = Split(readData(0), "_")

       dt.Rows.Add()
       dt.Rows(dt.Rows.Count - 1)("ccode") = readData2(1)
       dt.Rows(dt.Rows.Count - 1)("email") = readData(1)
       dt.Rows(dt.Rows.Count - 1)("invnum") = readData2(0)
       dt.Rows(dt.Rows.Count - 1)("regards") = readData(2)

   End While


   gvarray.DataSource = dt
   gvarray.DataBind()

   readEmailList.Close()

   ProcessFile.Visible = true

  End If