2008-11-06 39 views
9

"Tanto DataSource como DataSourceID se definen en 'grdCommunication'. Quite una definición.""Ambos DataSource y DataSourceID están definidos" error al utilizar ASP.NET GridView

Acabo de recibir este error hoy, el código ha estado funcionando hasta esta tarde, publiqué la última versión en nuestro servidor y se rompió con ese error tanto localmente como en el servidor. No uso "DataSourceID", la aplicación lee las consultas de la base de datos en una tabla de datos y establece la tabla de datos como el DataSource en las GridViews. Hice una búsqueda en Visual Studio, buscando toda la solución y la cadena "DataSourceID" no aparece en ni siquiera 1 línea de código en toda la solución. Esto es lo primero que me asustó.

Me imagino que ha estado funcionando ayer, así que revertí el código a la compilación de ayer. El error todavía estaba allí. Seguí retrocediendo una compilación, y aún así el problema está ahí. Volví un mes, todavía recibo el mismo error. Esta aplicación estaba funcionando bien esta mañana? Realmente no ha habido cambios en el código, y en ningún lugar de la aplicación se encuentra el ID de DataSource EVER en cualquiera de las vistas de grid. ¿Alguien ha visto algo como esto en absoluto?

¿Cómo puedo obtener ese error si nunca se establece DataSourceID ... y la palabra "DataSourceID" no está en mi solución? Acabo de hacer un wingrep en todo el árbol haciendo una búsqueda insensible a mayúsculas y minúsculas en datasourceid .... no saqué absolutamente nada. Esa palabra no está en absoluto en toda la aplicación.

<asp:GridView ID="grdCommunication" runat="server" 
    Height="130px" Width="100%" 
    AllowPaging="true" > 
    ... standard grid view column setup here... 
    </asp:GridView> 

// Code behind.. to set the datasource 
    DataSet dsActivity = objCompany.GetActivityDetails(); 

    grdCommunication.DataSource = dsActivity; 
    grdCommunication.DataBind(); 

// Se han eliminado algunas notas confusas.

+0

que quería gracias a todos por la lluvia de ideas conmigo y trabajar en torno a la pasada Microsoft engañar. y gracias tsilb ... – stephenbayer

Respuesta

9

Prueba esto:

DataSet dsActivity = objCompany.GetActivityDetails(); 
grdCommunication.DataSource = dsActivity.Tables[0]; 
grdCommunication.DataBind(); 
+0

Lamento que grdCommunication.DataMember también se haya configurado, lo dejé fuera. Pero lo intenté de esa manera también. Eso no fue bueno. Estoy eliminando esa vista de cuadrícula del código en este momento, solo para poner la aplicación en funcionamiento. – stephenbayer

+0

Bien, ¿obtiene el mismo resultado cuando se vincula a la Tabla en lugar de al DataSet? – tsilb

+0

ese era el problema, estaba usando "Actividades" como el nombre de la fuente de datos, y lo cambiaron por el mismo nombre de "ACTIVIDADES", solo en mayúsculas ... ahora ... eso me muestra que definitivamente es sensible a mayúsculas y minúsculas ... pero el error dado fue una completa pista falsa. – stephenbayer

1

tslib es correcto, no lo haga: grdCommunication.DataSourceID = null; o la cadena. Versión vacía. Solo usa DataSourceID si está utilizando un control SqlDataSource u ObjectDataSource para su enlace.

Se denomina enlace "declarativo" porque está utilizando controles "declarados" en su página. La vinculación a los controles no requiere una llamada al método DataBind().

Como está enlazando datos (llamando a grd.DataBind()) solo configura el DataSourrce y luego llama a DataBind().

+0

Solo hice eso porque estaba enloqueciendo. – stephenbayer

4

Holy smoke batman. El nombre de la tabla se modificó y mi Datasource no es válida. Pero ese mensaje de error no tiene ningún sentido en esta situación. Entonces, técnicamente, la solución de tsilb funcionará si llamo a la tabla por índice en lugar de por nombre, así que marcaré su solución como correcta.

Después de leer su publicación, probé dsActivity.Tables ["Activities"] en lugar de pasar el conjunto de datos al Datasource y el nombre de la tabla al Datamember, y obviamente eso no funcionó, pero si paso el índice real , lo cual no me gusta porque ese índice podría cambiar, entonces ahora está funcionando. Pero la parte en mal estado, fue ese error ... Ese error estaba completamente fuera de base en cuanto a cuál era el problema. diciendo que definí ambos y eliminé uno, cuando en realidad ese no era el caso. y otra cosa realmente desordenada, fue que el nombre de la tabla solo se cambió para que fuera todo mayúscula ... Pero bueno, "Actividades" es una clave diferente a "ACTIVIDADES".

+0

Como se demostró, a veces es más probable que cambie el nombre de la tabla que el cambio del índice ... lo que probablemente solo sucedería si su consulta cambia ... en cuyo caso usted instintivamente verificaría dos veces el código que lo ejecuta, ¿no? :) – tsilb

+0

Sí, supongo ... Simplemente no me gusta el cambio ... :( – stephenbayer

+0

+1, autodidacta en la práctica – tsilb

0

Me encontré con el mismo error, pero un problema y solución totalmente diferente. En mi caso, estoy usando LINQ to SQL para rellenar algunas listas desplegables y luego almacenar en caché los resultados para más vistas de página. Todo se cargaría bien con un caché claro, y luego saldría el error en las vistas de página posteriores.

if (Cache["countries"] != null) 
{ 
    lbCountries.Items.Clear(); 
    lbCountries.DataValueField = "Code"; 
    lbCountries.DataTextField = "Name"; 
    lbCountries.DataSource = (Cache["countries"]); 
    lbCountries.DataBind();} 
else 
{ 
    var lstCountries = from Countries in db_read.Countries orderby Countries.Name select Countries; 
    lbCountries.Items.Clear(); 
    lbCountries.DataValueField = "Code"; 
    lbCountries.DataTextField = "Name"; 
    lbCountries.DataSource = lstCountries.ToList(); 
    lbCountries.DataBind(); 

    Cache.Add("countries", lstCountries, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 240, 0), System.Web.Caching.CacheItemPriority.High, null); 
} 

El tema surgió a partir de: Cache.Add ("países", lstCountries, null, System.Web.Caching.Cache.NoAbsoluteExpiration, nuevo TimeSpan (0, 240, 0), System.Web .Caching.CacheItemPriority.High, null);

cuando debería haber sido: Cache.Add ("países", lstCountries.ToList(), nulos, System.Web.Caching.Cache.NoAbsoluteExpiration, nuevo TimeSpan (0, 240, 0), Sistema .Web.Caching.CacheItemPriority.High, null);

0

Recibí este error hoy, resulta que no tenía nada que ver con DataSourceID, y tenía todo que ver con el propio DatasSource.

Tuve un problema en mi DatasSource, y en lugar de obtener un error relacionado con DatasSource, obtuve este error sin sentido.

Asegúrate de que eres DatasSource es bueno, y este error debería desaparecer.

0

conjunto de datos siempre se unen con el índice de la tabla de gridview ...

ex. gridgrdCommunication.Table [0]; como metioned anteriormente por Tsilb

segunda manera de escribir intencionadamente ..

gridgrdCommunication.DataSourceID = String.Empty; gridgrdCommunication.DataSource = ds; gridgrdCommunication.DataBind();

0

devolver a la salida estructura de base de datos .... si está en proceso de adhesión sus datos arrojan un archivo dbml, la estructura de la tabla en su base de datos que es diferente de la estructura de archivos dbml

0

Si está utilizando el objeto de origen de datos y desea condicionalmente para recargar la red en código detrás se puede hacer con éxito este:

Dim datatable As DataTable = dataset.Tables(0) 
Dim dataSourceID As String = gvImageFiles.DataSourceID 
gvImageFiles.DataSourceID = Nothing 
gvImageFiles.DataSource = datatable.DefaultView 
gvImageFiles.DataBind() 
gvImageFiles.DataSource = Nothing 
gvImageFiles.DataSourceID = dataSourceID 
3

sustituir este código antes de esta grdCommunication.DataSource = dsActivity;

grdCommunication.DataBind(); 
grdCommunication.DataSourceID=""; 
0

Tendrás que elegir una forma de obligar a la rejilla si se trata de medios de código detrás del uso de código C# y luego quitar la propiedad DataSourceID de vista de cuadrícula de vista del diseño de la rejilla como esto

// hay que hacerlo como este

0

Por favor, intente esto:

gvCustomerInvoiceList.DataSourceID = ""; gvCustomerInvoiceList.DataSource = ci_data; gvCustomerInvoiceList.DataBind();

0

Recibí este error hoy. Resulta que mi procedimiento almacenado no devolvió ningún registro ni una estructura. Esto fue porque tenía un try catch vacío sin un raiserror.

+0

Si bien esto podría ser una pista valiosa para resolver el problema, una buena respuesta también demuestra la solución. edit] para proporcionar un código de ejemplo para mostrar lo que quiere decir. Alternativamente, considere escribir esto como un comentario. –

0
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Page.DataBind() 
End Sub 
Function GetData() 
    Dim dt As New DataTable 
    Try 

     dt.Columns.Add("ROOM_ID", GetType(String)) 
     dt.Columns.Add("SCHED_ID", GetType(String)) 
     dt.Columns.Add("TIME_START", GetType(Date)) 
     dt.Columns.Add("TIME_END", GetType(Date)) 


     Dim dr As DataRow = dt.NewRow 

     dr("ROOM_ID") = "Indocin" 
     dr("SCHED_ID") = "David" 
     dr("TIME_START") = "2018-01-03 09:00:00.000" 
     dr("TIME_END") = "2018-01-03 12:00:00.000" 
     dt.Rows.Add(dr) 


    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 
    Return dt 
End Function 

y añadir esto a su origen de datos item = "#% < GetData()%>"

Cuestiones relacionadas