Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net DropDownList未发回_Asp.net_Vb.net_Drop Down Menu_Postback - Fatal编程技术网

Asp.net DropDownList未发回

Asp.net DropDownList未发回,asp.net,vb.net,drop-down-menu,postback,Asp.net,Vb.net,Drop Down Menu,Postback,我正在使用VisualStudio2005和ASP。NET 2.0与此程序。这是用VB.net编写的 现在,我们已经有了一个Gridview,它被嵌入并数据绑定到另一个Gridview中。默认情况下,第二个Gridview是隐藏的,并由用户展开。在第二个gridview中有几个下拉列表。问题是,每当我更改selecteditem时,这些DropDownList不会触发OnSelectedIndexChanged函数,也不会自动回发 我很好奇它为什么不开火。多谢各位 Gridview1: Prot

我正在使用VisualStudio2005和ASP。NET 2.0与此程序。这是用VB.net编写的

现在,我们已经有了一个Gridview,它被嵌入并数据绑定到另一个Gridview中。默认情况下,第二个Gridview是隐藏的,并由用户展开。在第二个gridview中有几个下拉列表。问题是,每当我更改selecteditem时,这些DropDownList不会触发OnSelectedIndexChanged函数,也不会自动回发

我很好奇它为什么不开火。多谢各位

Gridview1:

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)

    Dim row As GridViewRow = e.Row
    Dim strSort As String = String.Empty
    Dim strCNRNum As String


    ' Make sure we aren't in header/footer rows
    If row.DataItem Is Nothing Then
        Return
    End If

    ' Find Child GridView control
    Dim gv As GridView = New GridView()
    gv = row.FindControl("GridView2")

    If gv.UniqueID = gvUniqueID Then
        gv.EditIndex = gvEditIndex
        ClientScript.RegisterStartupScript(GetType(Page), "Expand", "<SCRIPT LANGUAGE='javascript'>expandcollapse('div" + e.Row.DataItem("CNR_NUM").ToString() & "','one');</script>")
    End If

    ' Prepare the query for Child GridView by passing 
    ' the Customer ID of the parent row
    'Dim dsTemp As SqlDataSource
    'dsTemp = ChildDataSource(e.Row.DataItem("CNR_NUM").ToString, strSort)
    'gv.DataSource = dsTemp
    'gv.DataBind()

    strCNRNum = e.Row.DataItem("CNR_NUM").ToString()

    Dim dt As DataTable = New DataTable()
    Dim con As SqlConnection = New SqlConnection(ConnectionString)

    Try
        con.Open()
        Dim strSQL As String
        strSQL = "select " & _
                    "CS.SID, " & _
                    "CS.CNR_NUM, " & _
                    "CS.STEP_NUM, " & _
                    "CS.SERVER_ID, " & _
                    "S.SERVER_NM, " & _
                    "CS.DATABASE_ID, " & _
                    "D.DATABASE_NM, " & _
                    "CS.CMD_FILE_NM, " & _
                    "CS.EXECUTE_DTTM, " & _
                    "CS.STEP_TYPE_ID, " & _
                    "ST.STEP_TYPE, " & _
                    "ISNULL(CS.LOG_FILE_NM,'') as LOG_FILE_NM " & _
                 "from " & _
                    "dbo.CNR_STEPS CS INNER JOIN dbo.CNR_SERVERS S on CS.SERVER_ID = S.SERVER_ID " & _
                    "INNER JOIN dbo.CNR_DATABASES D ON CS.DATABASE_ID = D.DATABASE_ID " & _
                    "INNER JOIN dbo.CNR_STEP_TYPES ST ON CS.STEP_TYPE_ID = ST.STEP_TYPE_ID " & _
                 "where " & _
                    "CS.CNR_NUM = '" & strCNRNum & "' " & _
                 "order by " & _
                    "CS.STEP_NUM"

        Dim cmd As SqlCommand = New SqlCommand(strSQL, con)
        Dim da As SqlDataAdapter = New SqlDataAdapter(cmd)

        da.Fill(dt)

        If dt.Rows.Count > 0 Then
            gv.DataSource = dt
            gv.DataBind()
        Else
            dt.Rows.Add(dt.NewRow())
            dt.Rows(0)("CNR_NUM") = strCNRNum
            dt.Rows(0)("LOG_FILE_NM") = ""
            gv.DataSource = dt
            gv.DataBind()

            Dim colCount As Integer = gv.Columns.Count
            gv.Rows(0).Cells.Clear()
            gv.Rows(0).Cells.Add(New TableCell())
            gv.Rows(0).Cells(0).ColumnSpan = colCount

            gv.Rows(0).Cells(0).HorizontalAlign = HorizontalAlign.Center
            gv.Rows(0).Cells(0).ForeColor = System.Drawing.Color.Red
            gv.Rows(0).Cells(0).Font.Bold = True

            gv.Rows(0).Cells(0).Text = "No Steps Defined"

        End If
    Catch ex As Exception
        lblMessage.ForeColor = Drawing.Color.Red
        lblMessage.Text = "Error:  " & ex.Message.ToString()
        'ClientScript.RegisterStartupScript(GetType(Page), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + ex.Message.ToString().Replace("'", "") + "');</script>")
    End Try

End Sub
受保护的子GridView1\u行数据绑定(ByVal sender作为对象,ByVal e作为GridViewRowEventArgs)
按GridViewRow=e.行调整行的尺寸
Dim strSort As String=String.Empty
作为字符串的Dim strCNRNum
'确保我们不在页眉/页脚行中
如果row.DataItem为Nothing,则
返回
如果结束
'查找子GridView控件
Dim gv As GridView=新GridView()
gv=row.FindControl(“GridView2”)
如果gv.UniqueID=gvUniqueID,则
gv.EditIndex=gvEditIndex
RegisterStartupScript(GetType(第页),“展开”,“展开折叠('div“+e.Row.DataItem(“CNR_NUM”).ToString()&“,'one”);)
如果结束
'通过传递
'父行的客户ID
'Dim dsTemp作为SqlDataSource
'dsTemp=ChildDataSource(例如Row.DataItem(“CNR_NUM”).ToString,strSort)
'gv.DataSource=dsTemp
'gv.DataBind()
strCNRNum=e.Row.DataItem(“CNR_NUM”).ToString()
作为数据表的Dim dt=新数据表()
Dim con As SqlConnection=新的SqlConnection(ConnectionString)
尝试
con.Open()
作为字符串的Dim strSQL
strSQL=“选择”和_
“CS.SID,”_
“CS.CNR_NUM,”&_
“CS.STEP_NUM,&”_
“CS.SERVER_ID,&”_
“S.SERVER_NM,&”_
“CS.DATABASE_ID,&”_
“D.DATABASE_NM,&”_
“CS.CMD_文件_NM,&”_
“CS.EXECUTE_DTTM,”_
“CS.STEP_TYPE_ID,&”_
“ST.STEP_类型,&_
“ISNULL(CS.LOG_文件_NM,”)作为日志文件_NM”&_
"来自"及_
“dbo.CNR_步骤CS内部连接CS.SERVER_ID=S.SERVER_ID上的dbo.CNR_服务器”&_
“内部连接dbo.CNR_数据库D ON CS.DATABASE_ID=D.DATABASE_ID”&_
“内部连接dbo.CNR\u STEP\u TYPE ST ON CS.STEP\u TYPE\u ID=ST.STEP\u TYPE\u ID”&_
"何处"及_
“CS.CNR_NUM=”&strcnnum&“”&_
“订购人”和_
“CS.步骤数”
Dim cmd As SqlCommand=新SqlCommand(strSQL,con)
作为SqlDataAdapter的Dim da=新的SqlDataAdapter(cmd)
da.填充(dt)
如果dt.Rows.Count>0,则
gv.DataSource=dt
gv.DataBind()
其他的
dt.Rows.Add(dt.NewRow())
dt.行(0)(“CNR_NUM”)=strcnnum
dt.行(0)(“日志文件”=“”
gv.DataSource=dt
gv.DataBind()
Dim colCount As Integer=gv.Columns.Count
gv.Rows(0).Cells.Clear()
gv.Rows(0.Cells.Add(New TableCell())
gv.Rows(0).Cells(0).ColumnSpan=colCount
gv.行(0).单元格(0).水平对齐=水平对齐.中心
gv.行(0).单元格(0).前景色=System.Drawing.Color.Red
gv.Rows(0).Cells(0).Font.Bold=True
gv.Rows(0).Cells(0).Text=“未定义步骤”
如果结束
特例
lblMessage.ForeColor=Drawing.Color.Red
lblMessage.Text=“错误:”&ex.Message.ToString()
'ClientScript.RegisterStartupScript(GetType(第页),“消息”,“警报(''”+ex.Message.ToString().Replace(“'”,“)+”;”)
结束尝试
端接头
第二个gridview的ASP代码,位于第一个gridview中:

<asp:GridView ID="GridView2" AllowPaging="True" AllowSorting="true" Width="100%" Font-Size="Small"  AutoGenerateColumns="false" runat="server" DataKeyNames="CNR_NUM" ShowFooter="true" OnRowEditing = "GridView2_RowEditing"
                                    OnRowCommand = "GridView2_RowCommand"
                                    OnRowDeleting = "GridView2_RowDeleting"
                                    OnRowDeleted = "GridView2_RowDeleted"
                                    OnRowUpdating = "GridView2_RowUpdating"
                                    OnRowUpdated = "GridView2_RowUpdated"
                                    OnRowCancelingEdit = "GridView2_CancelingEdit"
                                    OnRowDatabound="GridView2_RowDataBound"

                                    CssClass="mGrid"  
                                    PagerStyle-CssClass="pgr"  
                                    >
                                    <HeaderStyle Font-Bold="True" ForeColor="White" />
                                    <Columns>
                                            <asp:TemplateField HeaderText="Step Type">
                                            <ItemTemplate><%#Eval("STEP_TYPE")%></ItemTemplate>
                                            <EditItemTemplate>
                                                <asp:DropDownList ID="ddl_StepTypes" 
                                                DataSourceID="ds_StepTypes" 
                                                SelectedValue='<%# Eval("STEP_TYPE_ID")%>'
                                                DataTextField="STEP_TYPE" 
                                                DataValueField="STEP_TYPE_ID"  
                                                runat="server" 
                                                Width="100px" 
                                                Font-Size="X-Small"
                                                AutoPostBack="true"
                                                OnSelectedIndexChanged = "ddl_StepTypes_SelectedIndexChanged">
                                                </asp:DropDownList>
                                                <label id="lblTest"></label>
                                                <!--<asp:TextBox ID="txtStepType" Text='<%# Eval("SERVER_ID")%>' runat="server"></asp:TextBox>-->
                                            </EditItemTemplate>
                                            <FooterTemplate>
                                                <asp:DropDownList DataSourceID="ds_StepTypes"
                                                  DataTextField="STEP_TYPE" DataValueField="STEP_TYPE_ID"  ID="ddl_StepTypes" runat="server" Width="100px" Font-Size="X-Small"></asp:DropDownList>
                                                <!--<asp:TextBox ID="txtStepType" Text='' runat="server"></asp:TextBox>-->
                                            </FooterTemplate>
                                        </asp:TemplateField>


如果需要更多信息,请告诉我。谢谢。

问题在于,如果向模板添加控件,GridView将创建该控件的多个副本,每个数据项一个副本。选择项目时,您需要一种方法来确定单击了哪个Dropdownlist以及它所属的行。 解决此问题的方法是使用GridView中的事件

GridView.RowCommand事件用于此目的。不幸的是,最初它应该在任何模板中单击任何按钮时触发。将模板中的控件事件转换为包含控件中的事件的过程称为事件冒泡

可能是一个可以帮助您的解决方法。或者,这篇文章也可能有帮助(或者在最下面引用另一篇)