我在GridView控件的模板列中放置了一个DropDownList。该GridView绑定到一个对象列表。每个对象都有一个int类型的属性,它对应于DropDownList ListItems中的一个值。我可以通过向下拉列表添加DataBind事件来以编程方式设置选定的项目,但我想知道是否有一种方法可以通过在aspx标记中使用代码块来设置选定的项目。
我在GridView控件的模板列中放置了一个DropDownList。该GridView绑定到一个对象列表。每个对象都有一个int类型的属性,它对应于DropDownList ListItems中的一个值。我可以通过向下拉列表添加DataBind事件来以编程方式设置选定的项目,但我想知道是否有一种方法可以通过在aspx标记中使用代码块来设置选定的项目。
在这种设计中要小心。按照这种方式创建网格下拉框意味着对于每个下拉框选项,您将重复为每一行进行设置。如果有多个行或多个下拉列,这很快就会导致页面大小超过1MB,降低性能。
话虽如此,您可以使用上下文绑定脚本标签在标记中完成此操作:
<asp:DropDown id="dropDown1" SelectedValue='<%# Eval("Key") %>' runat="server"/>
上下文绑定标记也允许您调用页面/用户控件上的公共/受保护函数,如下所示:
<asp:DropDown id="dropDown1" SelectedValue='<%# myFunction((int) Eval("Key")) %>' runat="server"/>
public string myFunction(int key){
return key.ToString();
}
为了避免为每一行生成相同的重复HTML,你可以将这些下拉框变成自动完成器或者创建一个隐藏的下拉框,仅渲染一次HTML,然后使用JQuery或JavaScript在客户端填充所有网格下拉列表。
你可以通过标记设置它:
<ItemTemplate>
<asp:DropDown .. SelectedValue='<%# Eval("Key") %>' />
</ItemTemplate>
根据绑定方式,您是否使用数据源控件?无论如何,我注意到这种方法可能会尝试在项绑定之前设置值,这可能会引发异常。不确定,曾经遇到过一次,认为可能是这个问题,但应该更深入地研究一下。
希望对您有所帮助。
你也可以使用 GridView 的 RowDataBound
事件,或者像 @Brian 所描述的那样在标记中进行选择。