«И DataSource, и DataSourceID определены в 'grdCommunication'. Удалите одно определение».
Я получил эту ошибку только сегодня, код работал до полудня. Я опубликовал последнюю версию на нашем сервере, и она сломалась с этой ошибкой как локально, так и на сервере. Я не использую «DataSourceID», приложение считывает запросы к базе данных в datatable и устанавливает datatable как DataSource в GridViews. Я выполнил поиск в Visual Studio, выполнил поиск всего решения, и строка «DataSourceID» не появилась ни в одной строке кода всего решения. Это первое, что меня напугало.
Я полагаю, что он работал вчера, поэтому я вернул код к вчерашней сборке. Ошибка все еще существовала. Я продолжал возвращаться к сборке, но проблема все еще существует. Я вернулся на месяц, я все еще получаю ту же ошибку. Это приложение сегодня утром работало нормально? На самом деле не было никаких изменений кода, и нигде в приложении DataSourceID КОГДА-ЛИБО установлен в каком-либо из представлений сетки. Кто-нибудь вообще видел что-нибудь подобное ??
Как я могу получить эту ошибку, если DataSourceID никогда не задан ... и слова «DataSourceID» нет в моем решении? Я только что сделал крылатый отчет по всему дереву, выполняя поиск без учета регистра в 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();
// Обновлено: удалены некоторые сбивающие с толку примечания.





Попробуй это:
DataSet dsActivity = objCompany.GetActivityDetails();
grdCommunication.DataSource = dsActivity.Tables[0];
grdCommunication.DataBind();
Мне очень жаль, что grdCommunication.DataMember также был установлен, я не учел его. Но я тоже пробовал это сделать. Это было бесполезно. Я удаляю это представление сетки из кода прямо сейчас, просто чтобы запустить приложение.
Хорошо, вы получите тот же результат при привязке к таблице, а не к DataSet?
это была проблема, я использовал «Действия» в качестве имени источника данных, и они изменили его на «АКТИВНОСТИ» с тем же именем, только в верхнем регистре ... теперь ... это показывает мне, что это определенно чувствительно к регистру ... но указанная ошибка был полным отвлекающим маневром.
tslib прав, не делайте: grdCommunication.DataSourceID = null; или строка. Пустая версия. Вы используете DataSourceID только в том случае, если вы используете для привязки элемент управления SqlDataSource или ObjectDataSource.
Это называется «декларативная» привязка, потому что вы используете «объявленные» элементы управления на своей странице. Привязка к элементам управления не требует вызова метода DataBind ().
Поскольку вы выполняете привязку данных вручную (вызывая grd.DataBind ()), вы устанавливаете только DataSourrce, а затем вызываете DataBind ().
Я сделал это только потому, что был в ужасе.
Святой дым бэтмен. Имя таблицы было изменено, из-за чего мой источник данных не работал. Но это сообщение об ошибке не имеет смысла в данной ситуации. Таким образом, технически решение tsilb будет работать, если я вызову таблицу по индексу, а не по имени, поэтому я отмечу его решение как правильное.
Прочитав его сообщение, я попробовал dsActivity.Tables ["Activities"] вместо передачи набора данных в Datasource и имени таблицы в Datamember, и, очевидно, это не сработало, но если я передам фактический индекс, я не буду Мне это не нравится, потому что этот индекс может измениться, теперь он работает. Но сплошной беспорядок была эта ошибка ... Эта ошибка совершенно не соответствовала сути проблемы. говоря, что я определил оба и удалить один, хотя на самом деле это не так. и еще одна действительно испорченная вещь: имя таблицы было изменено только на верхний регистр ... Но, эй, «Действия» - это другой ключ, чем «АКТИВНОСТИ».
Как было продемонстрировано, иногда изменение имени таблицы более вероятно, чем изменение индекса ... что, вероятно, произойдет только в случае изменения вашего запроса ... в этом случае вы бы инстинктивно перепроверили код, который его запускает, верно? :)
да я думаю .. я просто не люблю перемены .. :(
Никто не любит, когда что-то меняется вне его контроля. Вот почему у нас есть такие термины, как «Я приму действие, чтобы отодвинуть внешнюю зависимость». В моем мире это действительно имеет смысл для людей. Меня тошнит от этого.
Я столкнулся с той же ошибкой, но с совершенно другой проблемой и решением. В моем случае я использую LINQ to SQL для заполнения некоторых раскрывающихся списков, а затем кэширую результаты для дальнейших просмотров страниц. Все будет нормально загружаться с чистым кешем, а затем выдает ошибку при последующих просмотрах страницы.
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);
}
Проблема возникла из-за: Cache.Add ("страны", lstCountries, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan (0, 240, 0), System.Web.Caching.CacheItemPriority.High, null);
Когда это должно было быть: Cache.Add ("страны", lstCountries.ToList (), null, System.Web.Caching.Cache.NoAbsoluteExpiration, новый TimeSpan (0, 240, 0), System.Web.Caching.CacheItemPriority.High, null);
Я получил эту ошибку сегодня, оказалось, что она не имела ничего общего с DataSourceID, а имела все отношение к самому DatasSource.
У меня возникла проблема с DatasSource, и вместо ошибки, связанной с DatasSource, я получил эту бессмысленную ошибку.
Убедитесь, что ваш DatasSource в порядке, и эта ошибка должна исчезнуть.
всегда привязывать набор данных с индексом таблицы к gridview ...
бывший. gridgrdCommunication.Table [0]; как отмечалось выше Цильбом
второй способ вы намеренно пишете ..
gridgrdCommunication.DataSourceID = String.Empty; gridgrdCommunication.DataSource = ds; gridgrdCommunication.DataBind ();
Проверьте структуру базы данных .... если вы принимаете свои данные, создайте файл dbml, структура таблицы в вашей базе данных отличается от структуры файла dbml
Если вы используете объектный источник данных и хотите условно перезагрузить сетку в коде позади, вы можете успешно сделать это:
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
Замените этот код перед этим grdCommunication.DataSource = dsActivity;
grdCommunication.DataBind();
grdCommunication.DataSourceID = "";
Вам нужно выбрать один способ привязки сетки если это из кода позади означает использование кода C#, затем удалите свойство datasourceid из представления сетки из представления сетки нравится
// вы должны сделать это так
Пожалуйста, попробуйте это:
gvCustomerInvoiceList.DataSourceID = ""; gvCustomerInvoiceList.DataSource = ci_data; gvCustomerInvoiceList.DataBind();
Я получил эту ошибку сегодня. Оказывается, моя хранимая процедура не вернула ни записи, ни структуры. Это произошло потому, что у меня был пустой try catch без raiserror.
Хотя это может быть ценным советом для решения проблемы, хороший ответ также демонстрирует решение. Пожалуйста, редактировать, чтобы предоставить пример кода, чтобы показать, что вы имеете в виду. В качестве альтернативы, вы можете написать это как комментарий.
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 ()%>"
В моем случае строка подключения к базе данных не работала. Исправление строки подключения избавило от этой ошибки.
Я хотел поблагодарить вас всех за совместный мозговой штурм и работу над чертовым обманом Microsoft. и спасибо цилб ...