Ошибка «DataSource и DataSourceID определены» с использованием ASP.NET GridView - PullRequest
9 голосов
/ 06 ноября 2008

"DataSource и DataSourceID определены в grdCommunication. Удалить одно определение."

Я только что получил эту ошибку сегодня, код работал до того дня, когда я опубликовал последнюю версию на нашем сервере, и она сломалась с этой ошибкой как локально, так и на сервере. Я не использую «DataSourceID», приложение считывает запросы к базе данных в таблицу данных и устанавливает их в качестве источника данных на GridView. Я выполнил поиск в Visual Studio, выполняя поиск по всему решению, и строка «DataSourceID» не отображается ни в одной строке кода во всем решении. Это первое, что меня взволновало.

Я полагаю, он работал вчера, поэтому я вернул код к вчерашней сборке. Ошибка все еще была. Я продолжал возвращать сборку, и проблема все еще есть. Я вернулся через месяц, я все еще получаю ту же ошибку. Это приложение работало нормально сегодня утром? Изменений в коде действительно не было, и нигде в приложении не задан DataSourceID НИКОГДА на любом из видов сетки. Кто-нибудь вообще видел что-нибудь подобное ??

Как я могу получить эту ошибку, если DataSourceID никогда не устанавливается ... и слово "DataSourceID" отсутствует в моем решении? Я только что сделал wingrep по всему дереву, делая нечувствительный к регистру поиск по datasourceid .... абсолютно ничего не вытащил. Это слово абсолютно не во всем приложении.

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

// Обновлено: удалены некоторые запутанные заметки.

Ответы [ 13 ]

9 голосов
/ 06 ноября 2008

Попробуйте это:

DataSet dsActivity = objCompany.GetActivityDetails();
grdCommunication.DataSource = dsActivity.Tables[0];
grdCommunication.DataBind();
4 голосов
/ 06 ноября 2008

Святой дымный бэтмен. Имя таблицы было изменено, из-за чего мой источник данных оказался бесполезным. Но это сообщение об ошибке не имеет никакого смысла в этой ситуации. Технически решение tsilb сработает, если я вызову таблицу по индексу, а не по имени, поэтому я отмечу его решение как правильное.

Прочитав его пост, я попробовал dsActivity.Tables ["Activity"] вместо передачи набора данных в источник данных и имени таблицы в Datamember, и, очевидно, это не сработало, но если я передам фактический индекс, что я не люблю делать, потому что этот индекс может измениться, то теперь он работает. Но испорченная часть была той ошибкой. Эта ошибка была совершенно неосновной в том, в чем проблема. говоря, что я определил оба и удалить один, хотя на самом деле это было не так. и еще одна запутанная вещь: имя таблицы было изменено только на верхний регистр ... Но, эй, «Деятельности» - это другой ключ, чем «ДЕЯТЕЛЬНОСТЬ».

3 голосов
/ 17 октября 2012

Замените этот код перед этим grdCommunication.DataSource = dsActivity;

grdCommunication.DataBind();
grdCommunication.DataSourceID="";
1 голос
/ 06 ноября 2008

Цлиб прав, не делайте: grdCommunication.DataSourceID = null; или строка. Пустая версия. DataSourceID используется только в том случае, если для привязки используется элемент управления SqlDataSource или ObjectDataSource.

Это называется «декларативным» связыванием, потому что вы используете «объявленные» элементы управления на своей странице. Привязка к элементам управления не требует вызова метода DataBind ().

Поскольку вы привязываете данные вручную (вызывая grd.DataBind ()), вы только устанавливаете DataSourrce, а затем вызываете DataBind ().

0 голосов
/ 23 января 2018
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

и добавьте это к своему элементу DataSource = "<% # GetData ()%>"

0 голосов
/ 07 сентября 2017

Я получил эту ошибку сегодня. Оказывается, моя хранимая процедура не вернула ни записи, ни структуры. Это было потому, что у меня был пустой try catch без raiserror.

0 голосов
/ 29 августа 2016

Пожалуйста, попробуйте это:

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

0 голосов
/ 26 июля 2016

Вам нужно выбрать один из способов привязки сетки если это из-за кода означает использование кода c #, тогда удалите свойство datasourceid из вида сетки из вида дизайна сетки как это

// Вы должны сделать это так

0 голосов
/ 19 августа 2010

Если вы используете Object Data Source и хотите условно перезагрузить сетку в коде позади, вы можете успешно сделать это:

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
0 голосов
/ 14 апреля 2010

Проверьте свою структуру базы данных .... если вы присоединяете свои данные, создайте файл dbml, структура таблицы в вашей базе данных отличается от структуры файла dbml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...