2013-05-14 96 views
3

我想要一個dataset綁定到dropdownlist,它拋出一個HttpExceptionDropDownList.DataTextField不能綁定到數據集?

這裏就是我想要做的

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'. 

我m絕對肯定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? 現在這裏該表:

enter image description here

此存儲過程已被用於在多個場合,所以我敢肯定,它工作正常。但在這裏,也許是我忘了提最重要的代碼:

//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); 
    } 
} 

再一次,在DataSet dsGroupsAll曾經使用過這樣的數據存在:)

@manish米什拉 dsGroupsAll充滿上面的存儲過程相同。 爲了證明其實是有數據有:

enter image description here

對於那些還在下面,我已經證實,在dsGroupsNotOnFestival 14行。 當我試圖以簡單的方式得到一個值,例如:

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

我得到一個異常說,列0找不到......這是爲什麼?

+1

而不是'dsGroupsNotOnFestival.Tables [0] .DefaultView'作爲數據源,僅指定該表像'dsGroupsNotOnFestival.Tables [0]' – Habib 2013-05-14 12:06:57

+0

檢查'DataSet'中的列名是否有任何尾隨空格。 – 2013-05-14 12:09:11

+1

當您評論// ddlNewGroup.DataTextField =「band_naam」時,代碼是否正在運行; ? – Serge 2013-05-14 12:10:44

回答

3

我絕對肯定數據集包含一個標題爲band_naam的列。

我理解你的感受,但我絕對肯定,沒有一個因爲這個錯誤是非常明確的:

不包含名爲「band_naam」屬性

再次看看填充DataSet的代碼。 DefaultViewDataTable的完美形象,當然這是查詢的結果集,因此您用來填充此DataTable的查詢缺少此字段。

也許這是一個計算的字段,你忘記了AS關鍵字給它一個列名。


編輯

根據大家的反饋

(即查詢和模式的截圖),我會說,哈比卜可能擊中它的權利在註釋中的頭,改變這一行:

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

這一行:

ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0]; 

我個人從未有過一個綁定到DefaultView的問題,但我不覺得還有其他可能性。

+0

不,這個表中包含band_naam,我將發佈存儲過程和相關表格的圖片。感謝您的幫助。如果您需要更多信息,請讓我知道 – DerpyNerd 2013-05-14 12:10:42

+0

@RobbieVercammen,podia的結構是什麼樣的? – 2013-05-14 12:14:20

+0

三列:pod_id int,pod_omschr nvarchar(255),pod_locatie nvarchar(255) – DerpyNerd 2013-05-14 12:21:17

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() 

感謝大家幫助我!

+0

如果您認爲這是最佳解決方案,您可以選擇自己的答案作爲正確的答案。 – Ren 2013-05-14 14:04:47