2

グリッドビューが空のときに、ImportnatInfo という名前の TD をテーブルで非表示にしようとしています。このグリッドビューには、表示するデータベース内のテーブルの列が 1 つあります。このグリッドビューが空の場合、TD を非表示にしたいと考えています。

以下はaspコードです。

<td runat ="server" ID="ImportnatInfo" 
                style="width: inherit; border: 5px double #585858; padding-left: 5px; padding-right: 5px;
                height: inherit; background: #FFFFFF; background-position: center; border-radius: 25px;" 
                enableviewstate="True" visible="False">
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BorderStyle="None"
                    DataSourceID="ImportantSqlDataSource">
                    <Columns>
                        <asp:BoundField DataField="Importatnat_Info" SortExpression="Importatnat_Info">
                            <ControlStyle BorderStyle="None" Height="10px" />
                            <FooterStyle BorderStyle="None" Height="10px" />
                            <HeaderStyle BorderStyle="None" Height="10px" />
                            <ItemStyle BorderStyle="None" Height="10px" HorizontalAlign="Center" VerticalAlign="Middle" />
                        </asp:BoundField>
                    </Columns>
                </asp:GridView>
                <asp:SqlDataSource ID="ImportantSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:AgainConnectionString %>"
                    SelectCommand="SELECT [Importatnat_Info] FROM [StationInfoTable] WHERE ([StationNo] = @StationNo)">
                    <SelectParameters>
                        <asp:ControlParameter ControlID="ddlStationNames" Name="StationNo" PropertyName="SelectedValue"
                            Type="Int32" />
                    </SelectParameters>
                </asp:SqlDataSource>
                <br />
            </td>

VB.net コードは次のとおりです。

If GridView1.Rows.Count = 0 Then
        ImportnatInfo.Visible = False
    Else
        ImportnatInfo.Visible = True
    End If

ドロップダウンリストがあり、毎回何かを選択するので、表示するグリッドに何もない場合は、TD 全体を非表示にします。TD が空のときに非表示にしようとしている TD は、gridView Vb に何もないときに空にならないように追加するため、TD は常に表示されます。そのため、データソースを使用する必要があると考えましたが、何をすべきかまだわかりません。それを行う方法はありますか?

4

4 に答える 4

2

行のタイプを確認します (経由row.RowType); おそらくデータ行ではなく、空の行またはヘッダー行などです。そのため、ItemType または AlternateItem の ItemType を持つ行がカウントするタイプであることを確認する必要があります。このプロパティの詳細については、こちらを参照してください

編集: LINQ を使用して、適切なタイプの結果をフィルター処理できます。

Dim cnt = GridView1.Rows.Where( _
  Function(i) i.RowType = DataControlRowType.Item OrElse _
              i.RowType = DataControlRowType.AlternateItem).Count()
If cnt = 0 Then
    ImportnatInfo.Visible = False
Else
    ImportnatInfo.Visible = True
End If
于 2013-01-08T20:36:19.980 に答える
2

データ ソースのSelectedイベントにフックしてみてください

<asp:SqlDataSource ID="ImportantSqlDataSource" OnSelected="SqlDataSource1_Selected" runat="server" ConnectionString="<%$ ConnectionStrings:AgainConnectionString %>"
  SelectCommand="SELECT [Importatnat_Info] FROM [StationInfoTable] WHERE ([StationNo] = @StationNo)">
  <SelectParameters>
        <asp:ControlParameter ControlID="ddlStationNames" Name="StationNo" PropertyName="SelectedValue" Type="Int32" />
  </SelectParameters>

ノートOnSelected="SqlDataSource1_Selected"

次に、コードビハインドで

Protected Sub SqlDataSource1_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles SqlDataSource1.Selected
    ImportnatInfo.Visible = e.AffectedRows > 0

End Sub

データが返されない場合でも、グリッドビューに行がある場合があります: ヘッダー、フッター、および/またはデータが見つかりましたというメッセージ。

アップデート

また、次のことを試してください

Protected Sub SqlDataSource1_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles SqlDataSource1.Selected
    ImportnatInfo.Visible = e.AffectedRows > 0
    Gridview1.Visible = e.AffectedRows > 0

End Sub

これにより、の可視性に関係なく、行がない場合はグリッドビューが表示されないように設定する必要がありますtd。また、データソースを外に移動してみますtdが、違いはありませんが、そうなる可能性があります。

グリッドビューが非表示になっている場合にこれを試した後、td が表示されたままになっている場合は、ページのライフ サイクルの後半で、td の表示に影響を与える何かが発生している可能性があります。

于 2013-01-09T03:44:12.193 に答える
1
        GridView1.DataBind()
    ImportnatInfo.Visible = True
    If GridView1.Rows.Count >= 1 Then
        If GridView1.Rows(0).Cells.Count >= 1 Then
            If GridView1.Rows(0).Cells(0).Text.Trim() = "&nbsp;" Then
                ImportnatInfo.Visible = False
            Else
                ImportnatInfo.Visible = True
            End If
        End If
    Else
        ImportnatInfo.Visible = False
    End If

あなたはうまく機能していますが、そうでないことを確認した後、TDを表示するためにElseを追加する必要があります  

于 2013-01-15T14:32:42.870 に答える
1
  GridView1.DataBind()
    ImportantInfo.Visible = True
    If GridView1.Rows.Count = 1 Then
        If GridView1.Rows(0).Cells.Count = 1 Then
            If GridView1.Rows(0).Cells(0).Text.Trim() = "&nbsp;" Then
                ImportantInfo.Visible = False

            End If

        End If
    Else
        ImportantInfo.Visible = False
    End If

GridView に何もない場合、ASP.NET は常にスペースを残します。そのため、空であるかどうかを確認します。そうでない場合は、それがスペースであるか、GridView にデータがあるかどうかを確認します。

于 2013-01-14T15:09:42.283 に答える