我正在处理定义了ASP DropDownList的网页,并且在页面加载时,数据源通过DataSource.DataBind()绑定到它。当我单步执行代码时,下拉列表中没有显示任何内容,但是当页面实际显示时,它确实包含列表中的项目。 DataBind()何时应用于控件?
问题是SQL后端返回的某些值具有空文本,因此该行的下拉列表中不显示任何内容。我想只使用Value作为Text,但前提是Text为null。当我将代码循环并在DataBind()之后执行此操作时,代码中该点的下拉列表中没有任何内容。
谢谢!
答案 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