“使用ASP.NET GridView定义了”DataSource和DataSourceID“错误

时间:2008-11-06 17:51:11

标签: asp.net gridview

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

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

我认为它昨天一直在工作,所以我将代码恢复到昨天的版本。错误仍然存​​在。我一直在回建筑,但问题仍然存在。我回去了一个月,我仍然得到同样的错误。这个应用今天早上工作正常吗?实际上没有代码更改,并且应用程序中的任何位置都没有在任何gridview上设置DataSourceID EVER。有没有人见过这样的事情?

如果从未设置过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();

//更新:删除了一些令人困惑的笔记。

14 个答案:

答案 0 :(得分:9)

试试这个:

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

在此grdCommunication.DataSource = dsActivity;

之前替换此代码
grdCommunication.DataBind();
grdCommunication.DataSourceID="";

答案 3 :(得分:1)

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

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

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

答案 4 :(得分: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 .High,null);

答案 5 :(得分:0)

今天我收到了这个错误,结果发现它与DataSourceID无关,而且与DatasSource本身有关。

我的DatasSource出了问题,而不是收到与DatasSource相关的错误,我得到了这个毫无意义的错误。

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

答案 6 :(得分:0)

始终将数据集与表索引绑定到gridview ...

离。 gridgrdCommunication.Table [0];如上所述Tsilb

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

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

答案 7 :(得分:0)

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

答案 8 :(得分: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

答案 9 :(得分:0)

您需要选择一种方法来绑定网格  如果来自代码隐藏意味着使用c#代码然后从网格视图中删除datasourceid属性从网格的设计视图 像这样

//你必须这样做

答案 10 :(得分:0)

请试试这个:

  

gvCustomerInvoiceList.DataSourceID =“”;   gvCustomerInvoiceList.DataSource = ci_data;   gvCustomerInvoiceList.DataBind();

答案 11 :(得分:0)

我今天收到了这个错误。事实证明,我的存储过程既没有返回任何记录也没有返回结构。这是因为我有一个空Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME+" WHERE "+STATUS+" = "+"'0'" + " ORDER BY id DESC LIMIT 10", null); return cursor ; 而没有try catch

答案 12 :(得分: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 =&#34;&lt;%#GetData()%&gt;&#34;

答案 13 :(得分:0)

就我而言,与数据库的连接字符串不起作用。修复连接字符串可以解决此错误。