首页 > 解决方案 > 下拉列表在重定向到另一个 Web 表单页面时失去其价值内容

问题描述

我需要一些帮助来解决这个问题。一个星期以来,我有点卡住了,我什至向另一位程序员寻求帮助,他也不知道该怎么做。我会解释一切。

基本上我在一个名为“Tabla_Gestiones.aspx”的网络表单页面中有这个网格视图

 <asp:GridView ID="gvwGestiones" runat="server" CellPadding="10" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="2px" AutoGenerateColumns="False" DataKeyNames="intIdGestiones" AllowSorting="True" CellSpacing="10" HorizontalAlign="Center" Width="50%" >
      <Columns>
          <asp:buttonfield buttontype="Button" runat="server" commandname="Select" text="Detalle" />
          <asp:HyperLinkField Text="Modificar" DataNavigateUrlFields="intIdGestiones" DataNavigateUrlFormatString="Modificar_Gestiones-SistemaRegistroGestiones.aspx?intIdGestiones={0}" />                                                                    
           <asp:BoundField DataField="intIdGestiones" HeaderText="Código de Gestión"    >
               <HeaderStyle HorizontalAlign="Center" />
           </asp:BoundField>
           <asp:BoundField DataField="vchTipoGestiones" HeaderText="Tipo de Gestión"  >
               <HeaderStyle Width="200px"></HeaderStyle>
           </asp:BoundField>
           <asp:BoundField DataField="intCedulaUsuario" HeaderText="Cédula del Denunciante"  >
               <HeaderStyle Width="200px"></HeaderStyle>
           </asp:BoundField>
           <asp:BoundField DataField="vchNombreUsuario" HeaderText="Nombre del Denunciante"  >
                <HeaderStyle Width="200px"></HeaderStyle>
           </asp:BoundField>
           <asp:BoundField DataField="dtiFechaIngreso" HeaderText="Fecha de Ingreso"  HeaderStyle-Width="120px"> 
                <HeaderStyle Width="120px"></HeaderStyle>
           </asp:BoundField>
            <asp:BoundField DataField="vchFuenteGeneradora" HeaderText="Fuente Generadora"  HeaderStyle-Width="120px">
               <HeaderStyle Width="120px"></HeaderStyle>
            </asp:BoundField>                           
            <asp:BoundField DataField="vchDescripcionUnidad" HeaderText="Descripción Unidad"  HeaderStyle-Width="120px" >
               <HeaderStyle Width="120px"></HeaderStyle>
            </asp:BoundField>
            <asp:BoundField DataField="vchDescripcionDespacho" HeaderText="Descripción Despacho" HeaderStyle-Width="120px">
                <HeaderStyle Width="120px"></HeaderStyle>
             </asp:BoundField>                                                                 
     </Columns>                         
</asp:GridView>                     
<asp:SqlDataSource runat="server" ID="sdsGridView_Gestiones" ConnectionString='<%$ ConnectionStrings:bda_SIREGE_Connection %>' SelectCommand="mostrarGestiones" SelectCommandType="StoredProcedure" ></asp:SqlDataSource>

是一个简单的gridview,问题就来了。当我选择 HyperLinkField 时,它会将我带到另一个名为“Modificar_Gestiones.aspx”的网络表单

此页面的目的是读取 gridview 的数据并将信息打印到第二个 aspx 页面内的文本框中。这是我用来从 gridview 获取数据的代码:

Private ReadOnly Property id As Integer
   Get
       Return If(Not String.IsNullOrEmpty(Request.QueryString("intIdGestiones")), Integer.Parse(Request.QueryString("intIdGestiones")), 0)
   End Get
End Property

Private Sub TomarGestion()
        Dim strQuery As String = "palAgarrarGestiones"
        Dim con As New SqlConnection(strConnString)
        Dim cmd As New SqlCommand()
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = strQuery
        cmd.Connection = con
        cmd.Parameters.AddWithValue("@intIdGestiones", id)
        Dim da As SqlDataAdapter = New SqlDataAdapter(cmd)
        Dim dt As DataTable = New DataTable()
        da.Fill(dt)
        For Each dr As DataRow In dt.Rows
            Me.txtId_Gestiones.Text = dr("intIdGestiones").ToString()
            Me.rblTipo_Gestion.Text = dr("vchTipoGestiones").ToString()
            Me.txtCedula_Usuario.Text = dr("intCedulaUsuario").ToString()
            Me.txtNombre_Usuario.Text = dr("vchNombreUsuario").ToString()
            Me.txtFecha_Ingreso.Text = Convert.ToDateTime(dr("dtiFechaIngreso").ToString())
            Me.ddlFuente_Generadora.Text = dr("vchFuenteGeneradora").ToString()
            Me.ddlDescripcion_Unidad.Text = dr("vchDescripcionUnidad").ToString()
            Me.txtDespacho.Text = dr("vchDescripcionDespacho").ToString()            
        Next
    End Sub

这里 txt 表示文本框,ddl 表示下拉列表。这段代码有效,但只有一个给我这个问题:“Me.ddlDescripcion_Unidad.Text = dr("vchDescriptcionUnidad").ToString()"

它总是返回

Details of the Exception: System.ArgumentOutOfRangeException: 'ddlDescripcion_Unidad'has a SelectedValue that is not valid since doesn't exist in the element list. 
Parameter name: value

我对其进行了调试,显然 ddlDescriptcion_Unidad 中的值消失了,因此由于下拉列表为空,因此所选项目无法工作。我不知道该怎么做。ddlDescriptcion_Unidad 是一个特殊的下拉列表,我将向您展示:

<td class="auto-style3"><asp:DropDownList ID="ddlDescripcion_Unidad" runat="server" CssClass="form-control input-sm" Height="29px" Width="283px" AutoPostBack="True" OnSelectedIndexChanged="ddlDescripcion_Unidad_SelectedIndexChanged" DataSourceID="sdsDescripcion_Unidad" DataTextField="vchDescripcionUnidad" DataValueField="intIdUnidad" ></asp:DropDownList >
   <asp:SqlDataSource runat="server" ID="sdsDescripcion_Unidad" ConnectionString='<%$ ConnectionStrings:bda_SIREGE_Connection %>' SelectCommand="palConsultarUnidades" SelectCommandType="StoredProcedure"></asp:SqlDataSource></td>

这样做是因为 Unidad 是一个表,而 Gestiones 是另一个表,而 Gestiones 需要 Unidad 表中的 vchdescripcionesUnidad 所以要插入它,我需要这样做。

请任何人在这里帮助我这是我必须修复以完成系统的最后一件事,我不知道该怎么做我没有想法......我将不得不尝试掩盖错误,但我真的不想。

在有人询问存储过程 palAgarrarGestiones 之前确实显示了信息。我认为这个问题发生在前端而不是数据库......

标签: asp.netvb.netgridviewdrop-down-menu

解决方案


首先,为什么我们需要知道或关心前一页的一些列表视图或网格视图?(回答:我们不需要这些信息,也没有帮助)。

(因此您提供的各种信息都无关紧要——这可能有助于解释您在这里遇到的麻烦)。

如上所述,您的问题是:

我有一个下拉列表 - 我无法为该下拉列表分配一个值。

一行代码!!!

嗯,第一个问题是一个下拉列表有两个值。显示值和“后面”值。因此,用两个值填充组合框(下拉列表)是很常见的。

你有:

DataTextField="vchDescripcionUnidad" 
DataValueField="intIdUnidad"

那么你想在这里分配什么样的价值呢?

您不能直接为下拉列表分配“文本”值。您必须推入 DataValue - 而不是文本。

因此,通过“隐藏值”设置,您可以使用以下代码:

DropDownList1.Text = 78

或者

DropDownList1.SelectedValue = 78

但是,如果我们只有“文本”值而不是数字(DataValue)怎么办。

(所以请记住 dropdown.Text = 后面的数据值 - 而不是显示文本字段)。

通过一些文本(显示)值来设置?我们必须找到+搜索列表。

MS-Access 和 VB6 可能允许分配任何一种方式。

但是,我们不能这样做:

 DropDownList1.SelectedItem = "Athabasca Hotel"

所以,我们必须这样做:

 DropDownList1.SelectedValue = DropDownList1.Items.FindByText("Athabasca Hotel").Value

所以这里所说的问题是一行代码。所以这里所说的问题是如何为下拉列表分配一个文本值,而不是后面的值。

所有其他代码、注释等都与这个问题无关。

但是,如果我们想通过文本显示值来分配下拉列表呢?您必须将“文本”提供的值转换为用于该下拉列表的数字值。

所以这:

Me.ddlDescripcion_Unidad.Text = dr("vchDescripcionUnidad")

变成

Me.ddlDescripcion_Unidad.Text = ddlDescripcion_Unidad.Items.FindByText(dr("vchDescripcionUnidad")).Value

编辑:

好的,虽然以上所有内容都是“乐趣和游戏”?我们需要处理、思考、处理和解决的第一个问题也是唯一一个问题是获取/抓取/拉出我们想要处理的行——这实际上是我们开始工作所需的全部内容。所有这些代码,在下一页设置组合框等?这一切都发生在我们得到一个简单的想法之后,即选择一个行值传递给另一个例程的简单概念。

所以,让我们来解决这个问题:

我们有这个:

   <asp:HyperLinkField Text="Modificar" 
    DataNavigateUrlFields="intIdGestiones" 
      DataNavigateUrlFormatString="Modificar_Gestiones- 
      SistemaRegistroGestiones.aspx?intIdGestiones={0}" />                                                                    

我们可以将上面的更改为:

   <asp:HyperLinkField Text="Modificar" 
    DataNavigateUrlFields="intIdGestiones" 
      DataNavigateUrlFormatString="Modificar_Gestiones- 
      SistemaRegistroGestiones.aspx?intIdGestiones='<%# Eval("intIdGestiones") %>' />                                                                    

所以现在当你点击链接字段时,intIdGestionses 的值应该被传递到你的第二页。


推荐阅读