2009-01-22 14 views
6

Tengo un ListView que se une a un LinqDataSource y muestra las ubicaciones seleccionadas. El elemento de inserción contiene una lista desplegable que extrae de otro LinqDataSource para dar todas las ubicaciones no seleccionadas.Enlazando un DropDownList en ListView InsertItemTemplate lanzando un error

El problema es que me sale el siguiente error al cargar la página:

métodos de enlace de datos tales como Eval(), XPath(), y bind() solamente se pueden utilizar en el contexto de un control de enlace de datos.

Estoy haciendo una configuración muy similar en otra página del sitio web, y no nos está dando este error, así que estoy bastante confundido. Sé que puedo evitar esto al no ser vinculante, encontrar el control manualmente y obtener el valor, pero esto debería funcionar y no entiendo por qué no lo es.

¿Alguna idea?

La mejor parte del código fuente está debajo.

<asp:LinqDataSource ID="ldsLocations" runat="server" 
    ContextTypeName="ClearviewInterface.ESLinqDataContext" EnableDelete="true" EnableInsert="true" 
    OnInserting="ldsLocations_Inserting" OnDeleting="ldsLocations_Deleting" 
    TableName="crmLocations" OrderBy="addr1" OnSelecting="ldsLocations_Selecting" /> 

<asp:LinqDataSource ID="ldsFreeLocations" runat="server" 
    ContextTypeName="ClearviewInterface.ESLinqDataContext" OrderBy="addr1" 
    TableName="v_CVLocations" OnSelecting="ldsFreeLocations_Selecting" /> 

<asp:ListView ID="lvLocations" DataSourceID="ldsLocations" DataKeyNames="ID" InsertItemPosition="LastItem" runat="server" > 

<InsertItemTemplate> 
     <tr> 
      <td colspan="6"><hr /></td> 
     </tr> 
     <tr> 
      <td colspan="2"> 

       <asp:DropDownList ID="ddlFreeLocations" DataSourceID="ldsFreeLocations" DataTextField="addr1" 
             DataValueField="record" MarkFirstMatch="true" SelectedValue='<%# Bind("record") %>' 
             runat="server" /> 
      </td> 
      <td><asp:ImageButton ID="btnAdd" CommandName="Insert" SkinID="Insert" runat="server" /></td> 
     </tr> 

    </InsertItemTemplate> 
+0

Enlazar en SelectedValue del desplegable dont funciona cuando está en DROPDOWNLIST Listview ... como se dice que tiene misma configuración en otro sitio web que es trabajando ... ¿ha colocado el menú desplegable en Listview solo o en formview o gridview ??? también busqué muchos blogs porque tengo el mismo problema. pero encontré solo una solución. use Eval para mostrar el valor y para "insertar" o "actualizar" el código en ItemInserting y itemUpdating – Radhi

+0

si encuentra alguna solución. hacer el enlace en el menú desplegable de la lista de la lista ... por favor, dímelo también ... – Radhi

Respuesta

2

Tome un vistazo a este hilo http://forums.asp.net/t/1187425.aspx

Básicamente no se puede utilizar la sintaxis de enlace debido a controles dentro InsertItemTemplate son "unidireccional" solamente. Usa el código para obtener los valores.

0

He tenido un problema similar. Intenta usar #Eval en lugar de si no estás actualizando el valor de ese campo.

5

Como se explica en Joteke's Blog aquí hay una solución citada.

¿Está utilizando la expresión <%#Eval("field")%> para vincular el control? Si lo cambia a <%#DataBinder.Eval(Container.DataItem,"field")%>, , ¿parece que soluciona el error?

+0

Este enlace resolvió mi problema. Gracias. –

+0

¡SÍ! Este fue mi problema cuando usé 'eval (666)' para construir un subcontrol y un valor nulo arroja un wobbley. Usé el '<% # DataBinder.Eval (Container.DataItem," field ")%>,' y resolvió el problema porque mi subcontrol manejó el nulo y no se cayó como un moneky borracho. PD: actualicé su respuesta porque las respuestas del enlace solo son malas ... las cosas detrás del enlace podrían desaparecer algún día. – ppumkin

0

Lo he logrado. Tengo una vista de formulario con un SqlDataSource y en la vista de formulario hay una lista desplegable con un SQLdataSource.

Cuando se solicita un nuevo registro, vuelvo a emitir los comandos de selección para ambos orígenes de datos: el origen de la lista desplegable proporciona una lista de opciones, mientras que el origen de datos de formview no arroja nada.

Luego uso DataBind() tanto en la vista de formulario como en la lista desplegable y todo está bien.

Soy nuevo en ASP.Net pero esto es trabajo para mí y que me permite hacer lo que quiera - Unir por el uso de la lista desplegable y los cuadros de texto en la formview

espero que esto ayude a Nathan

0

Con #Eval puede valer la pena utilizar DataBinder.Eval() para garantizar que la vinculación se realice en el momento correcto.

1

Para tal escenario, podemos considerar las siguientes resoluciones:

  1. Para los controles anidados internos, en lugar de enlace de datos, utilizamos otros métodos para rellenar sus artículos. Por ejemplo, podemos usar un ciclo for para agregar elementos a la lista desplegable en lugar de enlazar datos. Por lo tanto, la expresión <% # ...%> no se evaluará.

  2. También podemos realizar cambios en el contenedor DetailsView control. En lugar de la expresión <% #%>, podemos usar manualmente algún evento como "RowDataBound" para completar el elemento de datos en el control interno determinado. Y cuando realice la actualización/inserción, extraiga manualmente los valores de los controles en el evento apropiado (como ItemUpdating o ItemInserting ...).

fuente: http://blogs.msdn.com/b/stcheng/archive/2009/01/15/aspnet-system-invalidoperationexception-databinding-methods-such-as-eval-xpath-and-bind-can-only-be-used-in-the-context-of-a-databound-control-error-in-nested-databinding-scenario.aspx

0

esto funcionará

protected void lstCompContctPerson_ItemCreated(object sender, RadListViewItemEventArgs e) 
     { 

     if ((e.Item != null) && (e.Item.ItemType == RadListViewItemType.InsertItem)) 
     { 
      System.Web.UI.Control ddlCompNames = e.Item.FindControl("ddlCompNames"); 

      (ddlCompNames as RadDropDownList).DataSource = (from _company in objshortcut.GetAllCompanies() 
      select new 
      { 
        CompanyID = _company.CompanyID, 
        CompContctName = _company.CompanyName 
      }).Distinct(); 

     } 
    } 
+0

Por favor explique por qué esto debería funcionar – slecorne

Cuestiones relacionadas