添加 Gridview 行

Add Gridview Rows

在引用 How to add gridview rows to a datatable? 时,我尝试创建一个基于数组的 gridview。

到目前为止,我的数组 [email_list ] 有字符串,其中每个索引有 3 个由 | 分隔的字符串。

示例:

索引 1:1231|Apple Company|apple@yahoo.com

索引 2:141411|KFC|eatChicken@yahoo.com

为了分隔字符串,我执行以下操作[确实有效]

 Dim strarray2() As String = email_list(i).Split("|"c)

  For Each str2 In strarray2
    Dim r As String = ""
    r = strarray2(y)
    y = y + 1
  Next

 ID = strarray2(0)
 company = strarray2(1)
 email = strarray2(2)

我想要的:

我想在每次遍历 email_list 数组时填充我的 gridview。

问题:

截至目前,字符串被分成 3 个变量:ID, company, email 我调试了字符串,它们确实有效。

但是;将值添加到 gridview 后,gridview 不会填充 [aka 不会显示在页面上]。这告诉我添加新行的方式是错误的。

我试过:

For Each row As GridViewRow In DisplaySup.Rows
   If row.RowType = DataControlRowType.DataRow Then

在我的代码之外,但由于当前没有行,我里面的所有代码都没有执行,所以我把它拿出来了。

关于如何修改我的以下编码有什么建议吗?

VB.NET

Dim dt As DataTable = New DataTable()

   dt.Columns.Add(New DataColumn("ID", GetType(String)))
   dt.Columns.Add(New DataColumn("Company Name", GetType(String)))
   dt.Columns.Add(New DataColumn("Email", GetType(String)))

        For i As Integer = 0 To email_list.Length - 2

            Dim y As Integer = 0
            Dim strarray2() As String = email_list(i).Split("|"c)

            For Each str2 In strarray2
                Dim r As String = ""
                r = strarray2(y)
                y = y + 1
            Next

            ID = strarray2(0)
            company = strarray2(1)
            email = strarray2(2)

            'ADD ONE ROW AT A TIME [my logic of what I want]
            Dim dr As DataRow = dt.NewRow()
            dr("ID") = Convert.ToString(ID)
            dr("Company Name") = Convert.ToString(company)
            dr("Email") = Convert.ToString(email)
            dt.Rows.Add(dr)

      Next

HTML:

<asp:GridView ID="DisplaySup" runat="server" align="center" 
Width="99%" AutoGenerateColumns="False"
BorderColor="Black" BorderStyle="Solid" DataKeyNames="ID" 
cssClass="grid_padding4" Font-Size="XX-Small">
   <Columns>

       <asp:BoundField DataField="ID" HeaderText="ID"> 
       <ItemStyle cssClass="grid_padding" width="15px"/>
       </asp:BoundField>

       <asp:BoundField DataField="company" HeaderText="Company Name" > 
       <ItemStyle cssClass="grid_padding" width="125px"/>
       </asp:BoundField>

       <asp:BoundField DataField="email" HeaderText="Owner Email" > 
       <ItemStyle cssClass="grid_padding" width="50px"/>
       </asp:BoundField>

    </Columns>

    <HeaderStyle BackColor="#BDBDAE" Font-Underline="False" 
       CssClass="linkNoUnderline" HorizontalAlign="Left" />
    <SelectedRowStyle BackColor="#99CCFF" />
</asp:GridView>

您创建的 DataTable 没问题,但您是否已将其分配给 GridView?检查代码中大写的所有注释

Dim dt As DataTable = New DataTable()
dt.Columns.Add(New DataColumn("ID", GetType(String)))

'YOUR DATACOUMN NAME IN DATATABLE  AND  DATAFIELD OF BOUNDFIELD IN GRIDVIEW MUST MATCH
dt.Columns.Add(New DataColumn("company", GetType(String)))
dt.Columns.Add(New DataColumn("email", GetType(String)))

For i As Integer = 0 To email_list.Length - 2' SHOULD IT NOT BE email_list.Length - 1, IF LAST ONE IS NOT BLANK
    Dim y As Integer = 0
    Dim strarray2() As String = email_list(i).Split("|"c)

    'AS Namrehs POINTED IN COMMENTS, NO YOU REALLY DON'T NEED THAT "For Each str2 In strarray2" LOOP

    ID = strarray2(0)
    company = strarray2(1)
    email = strarray2(2)

    'ADD ONE ROW AT A TIME [my logic of what I want]
    Dim dr As DataRow = dt.NewRow()
    dr("ID") = Convert.ToString(ID)
    dr("company") = Convert.ToString(company)
    dr("email") = Convert.ToString(email)
    dt.Rows.Add(dr)
Next

'HERE YOU ALSO HAVE TO ASSIGN AND BIND IT TO THE GRIDVIEW
DisplaySup.DataSource = dt
DisplaySup.DataBind()

不确定您为什么要为数据表烦恼。下面是一些在未绑定的 DataGridView (dgv1.) 中显示数组的代码。它不会更改数组内容,所以也许您希望使用数据表进行更新?

Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
    ' overhead for my testing
    Dim sData() As String = {"1231|Apple Company|apple@yahoo.com", "141411|KFC|eatChicken@yahoo.com"}
    dgv1.DataSource = Nothing

    ' could be done in designer one time
    dgv1.Columns.Clear()
    dgv1.Columns.Add("ID", "ID")
    dgv1.Columns.Add("Company", "Company")
    dgv1.Columns.Add("URL", "URL")

    For Each s As String In sData
        dgv1.Rows.Add(s.Split("|"))
    Next
    dgv1.AutoResizeColumns()
    dgv1.ClearSelection()
End Sub