VB.NET中具有RadioButtonList控制的嵌套GridView



我有2个GridViews在一个单个按钮列表控件中嵌套了一个。第一个网格视图的广播按钮列表具有诸如是,否,n/a的列表项目。单击"否"列表项目时,应显示嵌套的网格视图及其关联的广播按钮。

加载页面时,我可以看到所有网格视图及其关联的radiobuttons,但是GridView2在单击" no" RadioButton时没有显示和隐藏。我使用JavaScript作为该功能,但无法根据需要工作。我正在提供我的VB.NET代码和ASPX代码。任何帮助都将不胜感激。

vb.net代码

公共类_default

Inherits Page
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        GridView1.DataSource = GetData("select * from Questions")
        GridView1.DataBind()

    End If
End Sub
Private Shared Function GetData(query As String) As DataTable
    Dim strConnString As String = ConfigurationManager.ConnectionStrings("String").ConnectionString
    Using con As New SqlConnection(strConnString)
        Using cmd As New SqlCommand()
            cmd.CommandText = query
            Using sda As New SqlDataAdapter()
                cmd.Connection = con
                sda.SelectCommand = cmd
                Using ds As New DataSet()
                    Dim dt As New DataTable()
                    sda.Fill(dt)
                    Return dt
                End Using
            End Using
        End Using
    End Using
End Function

Protected Sub OnRowDataBound(sender As Object, e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim questid As String = GridView1.DataKeys(e.Row.RowIndex).Value.ToString()
        Dim GridView2 As GridView = TryCast(e.Row.FindControl("GridView2"), GridView)
        GridView2.DataSource = GetData(String.Format("SELECT * from Standards where Questions= '{0}'", questid))
        GridView2.DataBind()
    End If
End Sub

结束类

ASPX页

<%@ Page Title="Home Page" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.vb" Inherits="WebApplication1._Default" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" GridLines="None" CssClass="Grid"
 DataKeyNames="QstnID" OnRowDataBound="OnRowDataBound">
    <Columns>
        <asp:BoundField DataField="Question" HeaderText="Questions" />  
   <asp:TemplateField>
    <ItemTemplate> 
            <asp:RadioButtonList ID="QuestList" runat="server" DataValueField="Question" RepeatDirection="Horizontal">
              <asp:ListItem Enabled="False" Style="display: none" Text="" Value="0"></asp:ListItem>
              <asp:ListItem Value="Yes">Yes</asp:ListItem>
              <asp:ListItem Value="No">No</asp:ListItem>
              <asp:ListItem Value="N/A">N/A</asp:ListItem>
             </asp:RadioButtonList>
        <br> 
       </br>
        <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false" CssClass="ChildGrid" GridLines="None">
            <Columns>
                <asp:BoundField DataField="Description" HeaderText="Standards" />
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:RadioButtonList ID="StandList" runat="server" DataValueField="Description" RepeatDirection="Horizontal">
                            <asp:ListItem Enabled="False" Style="display: none" Text="" Value="0"></asp:ListItem>
                            <asp:ListItem Value="Yes">Yes</asp:ListItem>
                            <asp:ListItem Value="No" Selected="False">No</asp:ListItem>
                            <asp:ListItem Value="N/A">N/A</asp:ListItem>
                        </asp:RadioButtonList>
                        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <br>
        </br>
    </ItemTemplate>
   </asp:TemplateField>
  </Columns>
</asp:GridView> 
<asp:SqlDataSource ID="Response" runat="server" ConnectionString="<%$ ConnectionStrings:String1%>" SelectCommand="SELECT [Description] FROM [Standards]"></asp:SqlDataSource>
<asp:SqlDataSource ID="WcmQC" runat="server" ConnectionString="<%$ ConnectionStrings:String2 %>" SelectCommand="SELECT [Question] FROM [Questions]"></asp:SqlDataSource>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
$(document).ready(function () {
        $('#QuestList input').click(function () {
            var value = $('#QuestList input:checked').val();
            if (value == "Yes") {
                $("#GridView2").show();
             else {
                 $("#GridView2").hide();  
            }
            }
        });
    });
</script>
</asp:Content>

在您的JS中,您正在使用ID" QuestList":

$('#QuestList input').click(function () {

由于它是服务器控件,因此它将具有由" QuestList"组成的客户端ID,此前具有容器名称的层次结构。而且它也在中继器/网格中,这使其ID更加复杂。

而不是ID,而是使用类来定位您的列表。这样的东西:

<asp:RadioButtonList ID="QuestList" CssClass="MyListClass" runat="server" DataValueField="Question" RepeatDirection="Horizontal">

$('.MyListClass input').click(function () {

我尝试了您的代码并找到了几个JS错误,这些错误正在阻止事件处理工作。我在下面的代码示例中显示了一些修复程序,其中包括:

  1. 在您添加jQuery脚本的地方,您需要使用</script>关闭行。您不能像尝试执行的那样将其与一般脚本块合并。

  2. 参考我的第一个答案(有关客户端和服务器ID的主题),您还需要为#gridview2修复ID。在这种情况下

  3. 您的if语句中的牙套不匹配。您不需要第一行的支架,但是如果您喜欢该样式并确实包括它,则在else之前错过了匹配的样式:

    if (value == "Yes") { $("#GridView2").show(); else

  4. 我建议使用类而不是ID连接您的点击处理程序,但不要在处理程序中执行相同的操作以瞄准单击的radiobutton。该类有多个radiobutton。而是使用this来定位事件源对象(单击的RadioButton)。

在下面为您复制的是我在应用上述修复程序后结束的工作JS。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
    $('.MyListClass input').click(function () {
        alert($(this).val());
<%--     if (this.value == "Yes") 
            $("#GridView2").show();
         else 
            $("#GridView2").hide();  --%>
        });
    });
</script>

您可以看到,目前仅显示一个警报,因为恐怕您仍然需要进行一些调查和设计,以决定如何在活动处理程序中定位正确的GridView2实例。但是,这将很容易,有多种方法,并且有了一点耐心,您现在应该能够从我提供的其他信息以及一些谷歌搜索中解决。hth。

最新更新