添加 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
在引用 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