DropDownList的DataBind可以工作,但不会在后面的代码中显示

时间:2011-03-17 18:48:05

标签: asp.net data-binding drop-down-menu pageload

我正在处理定义了ASP DropDownList的网页,并且在页面加载时,数据源通过DataSource.DataBind()绑定到它。当我单步执行代码时,下拉列表中没有显示任何内容,但是当页面实际显示时,它确实包含列表中的项目。 DataBind()何时应用于控件?

问题是SQL后端返回的某些值具有空文本,因此该行的下拉列表中不显示任何内容。我想只使用Value作为Text,但前提是Text为null。当我将代码循环并在DataBind()之后执行此操作时,代码中该点的下拉列表中没有任何内容。

谢谢!

3 个答案:

答案 0 :(得分:0)

你可以

a)修改数据库查询以排除空值

b)之前进行数据绑定,迭代返回的数据并删除不需要的值。

答案 1 :(得分:0)

您的具体示例的最佳选择是执行kd7所说的内容,并修改您的查询。但是,如果您需要对项目进行其他修改,则可以在DropDownList的DataBound事件中访问它们。 MSDN。绑定发生后会触发此事件。

答案 2 :(得分:0)

您可以在分配数据之前使用LINQ,以便动态创建新类型,并按照您想要的方式排列数据。这是一个简单的例子:

// This simulates the data you get from the DB
List<SomeObject> lstData = new List<SomeObject>();
lstData.Add(new SomeObject() { ID = "1", Text = "One" });
lstData.Add(new SomeObject() { ID = "2", Text = "" });
lstData.Add(new SomeObject() { ID = "3", Text = "Three" });

// This will take your data and create a new version of it substituting the
// ID field into the Text field when the Text is null or empty.
yourDropDownList.DataSource = lstData.Select(i => new {
         ID = i.ID,
         Text = string.IsNullOrEmpty(i.Text) ? i.ID : i.Text }).ToList();

// Then just databind
yourDropDownList.DataBind();

DropDownList将包含以下内容:

One
2
Three