3

datasetaを aにバインドしようとしていますdropdownlistが、これは a をスローしますHttpException

これが私がやろうとしていることです

if (dsGroupsNotOnFestival.Tables[0].Rows.Count > 0)
{
    //Bind dataset to new group selection
    ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0].DefaultView;
    ddlNewGroup.DataValueField = "band_id";
    ddlNewGroup.DataTextField = "band_naam";
    ddlNewGroup.DataBind();
}
else
{
    ddlNewGroup.Items.Add(new ListItem("No groups to add"));
}

例外メッセージ:

DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'band_naam'.

datasetタイトルが band_naam の列が含まれていることは間違いありません。ご覧のとおり、 をバインドすると例外がスローされます。これは、が正しくバインドされDataTextFieldていることを意味します。DataValueField

編集:

これはストアド プロシージャです。

USE [groep2_festivals]
GO
/****** Object:  StoredProcedure [dbo].[GetGroupsOfFestival]    Script Date: 14-05-13 12:31:18 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Robbie Vercammen
-- Create date: 2013-05-09
-- Description: Getting all groups for a defined festival
-- =============================================
ALTER PROCEDURE [dbo].[GetGroupsOfFestival]
    (
    @festId  nvarchar(4)
    )
AS
BEGIN
    DECLARE @query varchar(255)

    SELECT b.*, p.* 
    FROM bands b 
    JOIN bandsperfestival bpf ON b.band_id = bpf.band_id 
    JOIN podia p ON p.pod_id = bpf.pod_id WHERE fest_id LIKE @festId
    EXEC(@query)
END

b.*bands b?に注意してください。ここでそのテーブル:

ここに画像の説明を入力

このストアド プロシージャは何度も使用されているので、正しく動作することは間違いありません。しかし、これはおそらく私が言及するのを忘れた最も重要なコードです:

//Filling dataset with groups not on this festival
dsGroupsNotOnFestival.Tables.Add(new DataTable());
foreach (DataRow row in dsGroupsAll.Tables[0].Rows)
{
    if (!dsGroupsPerFestival.Tables[0].Rows.Equals(row))
    {
        dsGroupsNotOnFestival.Tables[0].ImportRow(row);
    }
}

繰り返しますが、DataSetdsGroupsAll は以前に使用されているため、データが存在します:)

@manish mishra dsGroupsAll は、上記と同じストアド プロシージャで満たされています。そこに実際にデータがあることを証明するには:

ここに画像の説明を入力

まだフォローしている方は、 に14行あることを確認しましたdsGroupsNotOnFestival。たとえば、単純な方法で値を取得しようとしている場合:

String strResult = dsGroupsNotOnFestival.Tables[0].Rows[0][0].ToString();

列 0 が見つからないという例外が発生しました...なぜですか?

4

2 に答える 2

3

データセットに band_naam というタイトルの列が含まれていることは間違いありません。

お気持ちはわかりますが、そのエラーは非常に明白であるため、エラーがないことは間違いありません。

「band_naam」という名前のプロパティが含まれていません

それを満たすコードをもう一度見てくださいDataSet。はのDefaultView完全なイメージですDataTable。これはもちろんクエリの結果セットであるため、これを埋めるために使用しているクエリにはDataTableこのフィールドがありません。

計算フィールドASで、列名を付けるキーワードを忘れた可能性があります。


編集

あなたのフィードバック (つまり、クエリとスキーマのスクリーンショット) に基づいて、私は Habib がおそらくコメントの中で頭を悩ませていると言うつもりです。次の行を変更してください:

ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0].DefaultView;

この行に:

ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0];

私は個人的に a へのバインドで問題が発生したDefaultViewことはありませんが、他の可能性が残っているとは感じていません。

于 2013-05-14T12:05:51.960 に答える
1

自分の回答を承認できるかどうかはわかりませんが、悪夢の解決策を見つけました。

//Filling dataset with groups not on this festival
dsGroupsNotOnFestival = dsGroupsPerFestival.Clone();
foreach (DataRow row in dsGroupsAll.Tables[0].Rows)
{
    if (!dsGroupsPerFestival.Tables[0].Rows.Equals(row))
    {
        dsGroupsNotOnFestival.Tables[0].ImportRow(row);
    }
}

DataSet違いは、次を使用して、構造、制約などを保持して元のクローンを作成していることです。

dsGroupsPerFestival.Clone()

みんな助けてくれてありがとう!

于 2013-05-14T13:48:52.353 に答える