2008-11-06 4 views
9

"Zarówno DataSource, jak i DataSourceID są zdefiniowane na" grdCommunication ". Usuń jedną definicję.""Zarówno DataSource i DataSourceID są zdefiniowane" błąd przy użyciu ASP.NET GridView

Właśnie dostałem ten błąd dzisiaj, kod działa do dzisiejszego popołudnia opublikowałem najnowszą wersję na naszym serwerze i zepsuł się z tym błędem zarówno lokalnie, jak i na serwerze. Nie używam "DataSourceID", aplikacja odczytuje kwerendy bazy danych do datatable i ustawia datatable jako DataSource w GridViews. Zrobiłem wyszukiwanie w Visual Studio, przeszukując całe rozwiązanie, a ciąg "DataSourceID" nie pojawia się nawet w 1 linii kodu w całym rozwiązaniu. To pierwsza rzecz, która mnie przeraziła.

Sądzę, że działało wczoraj, więc przywróciłem kod do wczorajszej kompilacji. Błąd nadal tam był. Wciąż wracałem do kompilacji, a problem nadal istnieje. Wróciłem miesiąc, wciąż mam ten sam błąd. Ta aplikacja działała dobrze dziś rano? Naprawdę nie było żadnych zmian w kodzie, i nie ma gdzie w aplikacji jest DataSourceID EVER ustawiony na dowolnym gridview. Czy ktokolwiek kiedykolwiek widział coś takiego?

Jak mogę uzyskać ten błąd, jeśli DataSourceID nigdy nie jest ustawione ... a słowo "DataSourceID" nie jest w moim rozwiązaniu? Właśnie zrobiłem wingrep na całym drzewie, wykonując wyszukiwanie bez uwzględniania wielkości liter na datasourceid .... nie podniosłem absolutnie niczego. To słowo absolutnie nie ma miejsca w całej aplikacji.

<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(); 

// Zaktualizowany: usunięto niektóre mylące notatki.

+0

Chciałem podziękować wam wszystkim za mózgów ze mną i pracy wokół niecodzienna Microsoft wprowadza w błąd. i dziękuję tsilb ... – stephenbayer

Odpowiedz

9

Spróbuj tego:

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

Przykro mi, GrdCommunication.DataMember również został ustawiony, zostawiłem to. Ale tak też postąpiłem. To nie było dobre. Właśnie usuwam widok siatki z kodu, aby uruchomić i uruchomić aplikację. – stephenbayer

+0

OK, więc czy otrzymujesz taki sam wynik, gdy łączysz się z tabelą zamiast z DataSet? – tsilb

+0

to był problem, użyłem "Działania" jako nazwy źródła danych i zmienili je na "AKTYWNOŚCI" to samo imię, tylko wielkie litery ... teraz .. to pokazuje, że jest to z pewnością rozróżniana wielkość liter ... ale błąd dany był kompletnym czerwonym śledziem. – stephenbayer

1

tslib ma rację, nie rób: grdCommunication.DataSourceID = null; lub ciąg.Empty wersja. Korzystasz tylko z DataSourceID, jeśli używasz kontrolki SqlDataSource lub ObjectDataSource dla powiązania.

To się nazywa "deklaratywne", ponieważ używasz "zadeklarowanych" formantów na swojej stronie. Powiązanie z kontrolkami nie wymaga wywołania metody DataBind().

Ponieważ ręcznie korzystasz z DataBinding (wywołując funkcję grd.DataBind()), ustawiasz tylko DataSourrce, a następnie wywołuje DataBind().

+0

Po prostu to zrobiłem, bo się wkurzyłem. – stephenbayer

4

Holy smoke batman. Nazwa tabeli została zmieniona, co spowodowało, że mój zasób danych nie był dobry. Ale ten komunikat o błędzie nie ma sensu w tej sytuacji. Więc technicznie rozwiązanie tsilb zadziała, jeśli wezwę tabelę według indeksu zamiast nazwy, więc oznaczy jego rozwiązanie jako poprawne.

Po przeczytaniu jego posta, wypróbowałem dsActivity.Tables ["Działania"] zamiast przekazywać dataset do źródła danych i nazwę tabeli do Datamember, i oczywiście, że to nie zadziałało, ale jeśli przejdę prawdziwy indeks , co mi się nie podoba, ponieważ ten indeks może się zmienić, to teraz działa. Ale pomieszana część była tym błędem. Błąd ten był całkowicie nie na miejscu, co do problemu. mówiąc, że zdefiniowałem i usunąłem jeden, podczas gdy w rzeczywistości tak nie było. i kolejna naprawdę spartaczona rzecz, to nazwa stołu została zmieniona na całą wielką literę ... Ale hej, "Działania" to inny klucz niż "DZIAŁANIA".

+0

Jak pokazano, czasami zmiana nazwy tabeli jest bardziej prawdopodobna niż zmiana indeksu ... co prawdopodobnie nastąpi tylko wtedy, gdy zapytanie zmieni się ... w takim przypadku instynktownie podwójnie sprawdzasz kod, który go uruchamia, prawda? :) – tsilb

+0

tak sądzę .. Po prostu nie lubię zmiany .. :( – stephenbayer

+0

+1, samouk w praktyce – tsilb

0

Wystąpił ten sam błąd, ale zupełnie inny problem i rozwiązanie. W moim przypadku używam LINQ do SQL, aby zapełnić niektóre listy rozwijane, a następnie buforować wyniki dla dalszych odsłon strony. Wszystko ładowałoby się dobrze z wyraźną pamięcią podręczną, a następnie powodowałoby błąd w kolejnych odsłonach strony.

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); 
} 

Problem pochodzi z: Cache.Add ("państwa", lstCountries, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan (0, 240, 0), system.Web .Caching.CacheItemPriority.High, null);

Kiedy powinno być: Cache.Add ("państwa", lstCountries.ToList() null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan (0, 240, 0), System .Web.Caching.CacheItemPriority.High, null);

0

Dostałem ten błąd dzisiaj, okazało się, że nie miało to nic wspólnego z DataSourceID, i miało wszystko, co dotyczyło samego źródła DatasSource.

Miałem problem w moim DatasSource i zamiast uzyskać błąd związany z DatasSource, dostałem ten bezsensowny błąd.

Upewnij się, że jesteś DatasSource jest dobry, a ten błąd powinien zniknąć.

0

zawsze wiążą zestaw danych ze wskaźnikiem tabeli do widoku siatki ...

ex. gridgrdCommunication.Table [0]; jak metioned powyżej Tsilb

drugi sposób celowo napisać ..

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

0

Sprawdź strukturę bazy danych .... jeśli przystępujących dane rzucać plik dbml, struktura tabeli w bazie danych jest różna od struktury pliku dbml

0

Jeśli używasz obiektu źródła danych i chcą warunkowo przeładować siatkę w kod związany z powodzeniem można to zrobić:

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

Wymień ten kod przed tym grdCommunication.DataSource = dsActivity;

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

Musisz wybrał jeden sposób, aby powiązać siatki jeśli jest z kodu za środki użyciu kodu C#, a następnie usunąć właściwość datasourceid z widoku siatki z pola widzenia projektowania sieci jak ten

// trzeba zrobić to jak to

0

spróbuj tego:

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

0

Mam ten błąd dzisiaj. Okazuje się, że moja procedura przechowywana nie zwróciła żadnego rekordu ani struktury. Stało się tak, ponieważ miałem pusty try catch bez raiserror.

+0

Chociaż może to być cenna wskazówka, aby rozwiązać problem, dobra odpowiedź również pokazuje rozwiązanie. edit], aby podać przykładowy kod, aby pokazać, co masz na myśli. Możesz też rozważyć wpisanie tego jako komentarza. –

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 

i dodać do swojej pozycji DataSource = "<% # GetData()%>"

Powiązane problemy