gpt4 book ai didi

c# - 加载 ASP.NET DropDownList

转载 作者:太空宇宙 更新时间:2023-11-03 20:40:17 24 4
gpt4 key购买 nike

非常简单的问题...但奇怪的结果。我只是想用 C# 填充下拉列表

protected void Page_Load(object sender, EventArgs e)
{
if (!(Page.IsPostBack))
{
LoadDropDowns();
}
}

protected void LoadDropDowns()
{
ddlVendor.DataSource = BL.GetAllVendors();
ddlVendor.DataTextField = "VendorName";
ddlVendor.DataValueField = "VendorName";
ddlVendor.DataBind();
}

BL.GetAllVendors 只是一个执行此操作的静态类:

public static List<Vendor> GetAllVendors()
{
return DL.GetAllVendors();
}

而DL.GetAllVendors也是出建List的静态类(数据层):

public static List<Vendor> GetAllVendors()
{
using(SqlConnection con = new SqlConnection(connString))
{
//use sproc
SqlCommand cmd = new SqlCommand("selAllVendors", con);
cmd.CommandType = CommandType.StoredProcedure;

//temporary storage of list of vendors
List<Vendor> lv = new List<Vendor>();

con.Open();
SqlDataReader reader = cmd.ExecuteReader();

//continue as long as we have vendors
while (reader.Read())
{
//instantiate a vendor
Vendor v = new Vendor((string)reader["VendorName"]);
//add them to the list
lv.Add(v);
}
//clean the reader
reader.Close();
reader = null;

//return that list
return lv;
}
}

供应商类很简单:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Vendor
/// </summary>
namespace TK.Objects
{
public class Vendor
{
private string VendorName { get; set; }

public Vendor(string vn)
{
VendorName = vn;
}
}
}

我知道我的存储过程是正确的,因为我进行了调试/观察,我看到它提取了两条记录“All”和“Microsoft”。

存储过程很简单:

CREATE PROCEDURE selAllVendors
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

SELECT
Vendor AS VendorName,
1 as SortOrder
FROM
Vendor
UNION ALL
SELECT
'All' AS VendorName,
0 as SortOrder
ORDER BY
SortOrder,
Vendor
END
GO

但是当我运行这段代码时出现错误:

System.Web.HttpException was unhandled by user code
Message=DataBinding: 'TK.Objects.Vendor' does not contain a property with the name 'VendorName'.
Source=System.Web
ErrorCode=-2147467259
WebEventCode=0
StackTrace:
at System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName)
at System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName, String format)
at System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable dataSource)
at System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e)
at System.Web.UI.WebControls.ListControl.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at _Default.LoadDropDowns() in c:\Users\Documents\Visual Studio 2010\WebSites\T\Default.aspx.cs:line 26
at _Default.Page_Load(Object sender, EventArgs e) in c:\Users\Documents\Visual Studio 2010\WebSites\T\Default.aspx.cs:line 17
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:

我在这里错过了什么?

最佳答案

Vendor 类的 VendorName 属性必须是公共(public)的,而不是私有(private)的。

关于c# - 加载 ASP.NET DropDownList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3119897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com