9

「DataSource と DataSourceID の両方が 'grdCommunication' で定義されています。1 つの定義を削除してください。」

今日このエラーが発生しました。コードは今日の午後まで機能しており、最新バージョンをサーバーに公開しましたが、ローカルとサーバーの両方でそのエラーが発生しました。「DataSourceID」は使用しません。アプリケーションはデータベースクエリをデータテーブルに読み取り、データテーブルを GridViews の DataSource として設定します。Visual Studio で検索を行い、ソリューション全体を検索しましたが、文字列 "DataSourceID" はソリューション全体の 1 行のコードにも表示されません。これが私を驚かせた最初のことです。

昨日は動いていたと思うので、コードを昨日のビルドに戻しました。エラーはまだありました。ビルドを戻し続けましたが、それでも問題は解決しません。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"] を試しましたが、明らかにうまくいきませんでしたが、実際のインデックスを渡すと、そのインデックスが変更される可能性があるため、やりたくありませんが、現在は機能しています。しかし、めちゃくちゃになったのはそのエラーでした..そのエラーは、問題が何であるかについて完全に根拠がありませんでした。私は両方を定義し、一方を削除すると言いましたが、実際にはそうではありませんでした。もう 1 つの非常に厄介なことは、テーブル名がすべて大文字に変更されただけだったことです...しかし、「Activities」は「ACTIVITIES」とは異なるキーです。

于 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

データベース構造を確認してください....データにアクセスする場合は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

今日このエラーが発生しましたが、それは DataSourceID とは何の関係もなく、DatasSource 自体にすべて関係していることが判明しました。

DatasSource に問題があり、 DatasSource 関連のエラーが発生する代わりに、この無意味なエラーが発生しました。

DatasSource に問題がないことを確認してください。このエラーは解消されます。

于 2009-03-16T23:59:43.823 に答える
0

グリッドをバインドする方法を 1 つ選択する必要があり ます。コード ビハインド手段からの場合は、C# コードを使用して、グリッド ビューから datasourceid プロパティを削除し、次のようにグリッドのデザイン ビューから削除します。

// このようにする必要があります

于 2016-07-26T08:49:04.000 に答える
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

常にテーブル インデックスを含むデータセットを gridview にバインドします...

元。gridgrdCommunication.Table[0]; 上で述べたように Tsilb

あなたが意図的に書く第二の方法..

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

于 2010-02-04T17:30:29.927 に答える