asp.net - 扫描每列中的每个 gridview 行,如果所有行都为空,则隐藏该列

标签 asp.net vb.net gridview

我有一个像这样的 gridview。它绑定(bind)在数据源中。现在,我需要的是隐藏其行没有可用数据的列。在下表示例中,HeaderText 为“2ND”的列应该被隐藏,因为它没有数据。

enter image description here

Protected Sub grdsf_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles grdsf.DataBound
        Dim rowscount As Integer = grdsf.Rows.Count
        Dim columnscount As Integer = grdsf.Columns.Count
        Dim k As Integer = 0
        For j As Integer = 1 To columnscount - 1 Step j + 1
            For i As Integer = 0 To rowscount - 1 step i + 1
                Dim x As String = grdsf.Rows(i).Cells(j).Text
                If x = String.Empty Then
                    k = k + 1
                End If
            Next
            Dim col As DataControlField = grdsf.Columns(j)
            If k = rowscount Then
                col.Visible = False
            End If

        Next
    End Sub

列的循环从索引 1 开始,因为不应隐藏第 1 列..

<asp:GridView ID="grdsf" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" DataSourceID="SqlDataSource1" GridLines="Horizontal" ShowFooter="True" Width="90%">
<RowStyle ForeColor="#000066" />
<FooterStyle BackColor="White" ForeColor="#000066" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
<asp:BoundField DataField="LNAME" HeaderText="LNAME" SortExpression="LNAME" />
<asp:BoundField DataField="OYRGR" HeaderText="OYRGR" SortExpression="OYRGR" />
<asp:BoundField DataField="Swimming" HeaderText="Swimming" ReadOnly="True" SortExpression="Swimming" NullDisplayText="" />
<asp:BoundField DataField="Soccer" HeaderText="Soccer" ReadOnly="True" SortExpression="Soccer" NullDisplayText="" />
<asp:BoundField DataField="Softball" HeaderText="Softball" ReadOnly="True" SortExpression="Softball" NullDisplayText="" />
<asp:BoundField DataField="Baseball" HeaderText="Baseball" ReadOnly="True" SortExpression="Baseball" NullDisplayText="" />
<asp:BoundField DataField="Volleyball" HeaderText="Volleyball" ReadOnly="True" SortExpression="Volleyball" />
<asp:BoundField DataField="Basketball" HeaderText="Basketball" ReadOnly="True" SortExpression="Basketball" />
<asp:BoundField DataField="Martial Arts" HeaderText="Martial Arts" ReadOnly="True" SortExpression="Martial Arts" />
<asp:BoundField DataField="Karate" HeaderText="Karate" ReadOnly="True" SortExpression="Karate" />
<asp:BoundField DataField="Arnis" HeaderText="Arnis" ReadOnly="True" SortExpression="Arnis" />
<asp:BoundField DataField="Taekwondo" HeaderText="Taekwondo" ReadOnly="True" SortExpression="Taekwondo" />
<asp:BoundField DataField="Judo" HeaderText="Judo" ReadOnly="True" SortExpression="Judo" />
<asp:BoundField DataField="Boxing" HeaderText="Boxing" ReadOnly="True" SortExpression="Boxing" />
<asp:BoundField DataField="Wrestling" HeaderText="Wrestling" ReadOnly="True" SortExpression="Wrestling" />
<asp:BoundField DataField="Unit Physical Fitness" HeaderText="Unit Physical Fitness" ReadOnly="True" SortExpression="Unit Physical Fitness" />
<asp:BoundField DataField="Gymnastics" HeaderText="Gymnastics" ReadOnly="True" SortExpression="Gymnastics" />
<asp:BoundField DataField="Health and Fitness" HeaderText="Health and Fitness" ReadOnly="True" SortExpression="Health and Fitness" />
<asp:BoundField DataField="Sports Mngt." HeaderText="Sports Mngt." ReadOnly="True" SortExpression="Sports Mngt." />
<asp:BoundField DataField="Badminton" HeaderText="Badminton" ReadOnly="True" SortExpression="Badminton" />
</Columns>
</asp:GridView>

最佳答案

试试这个方法。

Private Sub HideBlankColumns()
    Dim bHasValue As Boolean
    Dim sValue As String
    For iCol As Integer = 0 To GridView1.ColumnCount - 1
        bHasValue = False
        For iRow As Integer = 0 To GridView1.RowCount - 1
            sValue = (GridView1.Rows(iRow).FindControl("LableID") As Label).Text
            If GridView1.Rows(iRow).Cells(iCol).Text != String.Empty && sValue != String.Empty Then
                bHasValue = True
                Exit For
            End If
        Next
        'To Hide the column
        If bHasValue = False Then
            GridView1.Columns(iCol).Visible = False
        End If

        ' ''To Remove the Column
        ''If bHasValue = False Then
        ''    GridView1.Columns.RemoveAt(iCol)
        ''    iCol -= 1
        ''End If
    Next

End Sub

关于asp.net - 扫描每列中的每个 gridview 行,如果所有行都为空,则隐藏该列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621275/

相关文章:

c# - 更改密码对 Asp.Net Core 2 的 Novell LDAP 修改不生效

VB.Net 中的 XML 序列化大小限制?

c# - 在另一个页面中嵌入带有 silverlight 应用程序的 aspx 页面

c# - 如何将对象的 List<> 数据绑定(bind)到 DropDownList 并根据对象中的属性设置 SelectedItem?

c# - 框架.NET。很多 Dll 和一个 Exe 之间的区别

c# - JavaScript 哈希和等效的 .NET 算法

android - 数据集更改后如何默认防止 gridview 滚动

javascript - 带有卡住标题和 PagerTemplate 的 GridView

javascript - 调用按钮单击gridview内的文件上传

c# - 使用 jquery 调用 C# 方法