9

“DataSource 和 DataSourceID 都在 'grdCommunication' 上定义。删除一个定义。”

我今天刚收到这个错误,代码一直有效,直到今天下午我将最新版本发布到我们的服务器,它在本地和服务器上都出现了该错误。我不使用“DataSourceID”,应用程序将数据库查询读入数据表并将数据表设置为 GridViews 上的数据源。我在 Visual Studio 中进行了搜索,搜索了整个解决方案,而字符串“DataSourceID”甚至没有出现在整个解决方案的 1 行代码中。这是让我感到害怕的第一件事。

我认为它昨天一直在工作,所以我将代码恢复到昨天的构建。错误仍然存​​在。我一直在回溯构建,但问题仍然存在。我回去一个月了,我仍然遇到同样的错误。这个应用程序今天早上运行良好?确实没有代码更改,应用程序中的任何地方都没有在任何网格视图上设置 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();

// 更新:删除了一些令人困惑的注释。

4

14 回答 14

9

试试这个:

DataSet dsActivity = objCompany.GetActivityDetails();
grdCommunication.DataSource = dsActivity.Tables[0];
grdCommunication.DataBind();
于 2008-11-06T18:12:11.717 回答
4

圣烟蝙蝠侠。表名已更改,导致我的数据源不好。但是在这种情况下,该错误消息没有任何意义。因此,从技术上讲,如果我按索引而不是按名称调用表,则 tsilb 的解决方案将起作用,因此我会将他的解决方案标记为正确。

阅读他的帖子后,我尝试了 dsActivity.Tables["Activities"] 而不是将数据集传递给 Datasource 并将表名传递给 Datamember,显然这不起作用,但如果我传递实际的索引,我不会'不喜欢这样做,因为该索引可能会改变,然后它现在正在工作。但搞砸的部分是那个错误。那个错误完全不符合问题所在。说我定义了两者并删除了一个,而实际上并非如此。另一个真正搞砸的事情是,表名只是改为全部大写......但是,“活动”是与“活动”不同的键。

于 2008-11-06T18:24:01.257 回答
3

在此 grdCommunication.DataSource = dsActivity; 之前替换此代码

grdCommunication.DataBind();
grdCommunication.DataSourceID="";
于 2012-10-17T07:34:48.147 回答
1

tslib 是对的,不要这样做:grdCommunication.DataSourceID = null; 或 string.Empty 版本。如果您使用 SqlDataSource 或 ObjectDataSource 控件进行绑定,则仅使用 DataSourceID。

它被称为“声明式”绑定,因为您使用的是页面上的“声明式”控件。绑定到控件不需要调用 DataBind() 方法。

因为您是手动进行 DataBinding(调用 grd.DataBind()),所以您只需设置 DataSourrce,然后调用 DataBind()。

于 2008-11-06T18:16:00.650 回答
0

我遇到了同样的错误,但问题和解决方案完全不同。在我的例子中,我使用 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("countries", lstCountries , null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 240, 0), System.Web.Caching.CacheItemPriority.High, null);

什么时候应该是:Cache.Add("countries", lstCountries.ToList(), null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 240, 0), System.Web.Caching.CacheItemPriority。高,空);

于 2009-01-26T18:22:11.410 回答
0

我今天遇到了这个错误,原来它与 DataSourceID 无关,而与 DatasSource 本身有关。

我的 DatasSource 有问题,我没有收到与 DatasSource 相关的错误,而是收到了这个无意义的错误。

确保你的 DatasSource 是好的,这个错误应该会消失。

于 2009-03-16T23:59:43.823 回答
0

始终将具有表索引的数据集绑定到 gridview...

前任。gridgrdCommunication.Table[0]; 正如上面提到的 Tsilb

你故意写的第二种方式..

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

于 2010-02-04T17:30:29.927 回答
0

检查你的数据库结构......如果你正在访问你的数据抛出一个 dbml 文件,你的数据库中的表结构与 dbml 文件结构不同

于 2010-04-14T14:56:00.730 回答
0

如果您正在使用对象数据源并希望在后面的代码中有条件地重新加载网格,您可以成功地做到这一点:

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
于 2010-08-19T14:19:57.373 回答
0

您需要选择一种方法来绑定网格 ,如果它来自后面的代码意味着使用 c# 代码,然后从网格的设计视图中从网格视图中删除 datasourceid 属性,如下所示

//你必须让它像这样

于 2016-07-26T08:49:04.000 回答
0

请试试这个:

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

于 2016-08-29T17:19:26.197 回答
0

我今天收到了这个错误。事实证明,我的存储过程既没有返回任何记录,也没有返回结构。这是因为我有一个try catch没有raiserror.

于 2017-09-07T10:40:31.440 回答
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

并将其添加到您的项目 DataSource="<%# GetData() %>"

于 2018-01-23T07:33:40.980 回答
0

在我的情况下,到数据库的连接字符串不起作用。修复连接字符串消除了这个错误。

于 2019-08-21T02:59:20.937 回答