簡體   English   中英

DropDownList.DataTextField不能綁定到數據集?

[英]DropDownList.DataTextField can't be bound to a dataset?

我正在嘗試將dataset綁定到dropdownlist ,該dropdownlist會拋出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);
    }
}

再一次, DataSet dsGroupsAll之前已經使用過,所以數據存在:)

@manish mishra dsGroupsAll充滿了上面相同的存儲過程。 為了證明那里有實際的數據:

在此輸入圖像描述

對於那些仍然關注的人,我已經確認dsGroupsNotOnFestival有14行。 當我試圖以簡單的方式獲取值時,例如:

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

我得到一個例外,說找不到第0列......為什么會這樣?

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

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

不包含名為'band_naam'的屬性

再看一下填充DataSet的代碼。 DefaultViewDataTable的完美圖像,當然它是查詢的結果集,因此您用來填充此DataTable的查詢缺少此字段。

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


編輯

根據您的反饋(即查詢和架構的屏幕截圖),我要說Habib可能會在評論中直接點擊它,更改此行:

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

到這一行:

ddlNewGroup.DataSource = dsGroupsNotOnFestival.Tables[0];

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

不確定我是否被允許批准我自己的答案,但我找到了解決我夢魘的方法。

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

謝謝大家幫幫我!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM