我在edititemtemplate中有一个dropdownlist控件,用于定义如下的详细信息视图:
<asp:TemplateField HeaderText="Primary Use">
<EditItemTemplate>
<asp:DropDownList ID="ddlPrimaryUseEdit" runat="server" OnDataBinding="DropDownList_DataBinding"
SelectedValue='<%# Bind("PrimaryUse") %>' ToolTip="Primary Use">
<asp:ListItem Value="">Unknown</asp:ListItem>
<asp:ListItem>Manufacturing Facilities</asp:ListItem>
<asp:ListItem>Residential</asp:ListItem>
<asp:ListItem>VSSM Office</asp:ListItem>
<asp:ListItem>Engineering / Office / Warehouse</asp:ListItem>
<asp:ListItem>Vacant / Surplus Land</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
我有一个数据源定义为对我的数据库的查询,该数据库有一个名为“PrimaryUse”的列。有时,PrimaryUse列中可能有一个值未列为下拉列表项之一,因此我的应用程序在尝试将下拉列表的selectedvalue绑定到该字段时崩溃。我正在尝试在edititemtemplate的OnDataBinding事件中创建代码,该事件将检查从数据源返回的值是否是在下拉列表选项中列为项目的有效值。我的问题是我不知道如何在后面的代码中获取该列的数据源字段值。这可能吗?是这样,有人可以给我一个例子或指出我如何做到这一点的方向?
因此,在上面列出的edititemtemplate的OnDataBinding事件中,我想做类似以下的事情(伪代码):
if datasource.datafieldvalue("PrimaryUse") is in dropdownlist.Items then Valid
else set dropdownlist.Selectedvalue = "Default"
答案 0 :(得分:1)
您想要检查数据源的onDataBinding事件处理程序中的有效值。成功的数据源数据绑定的结果是来自EventArgs的List转换。如果你知道一点LINQ,你可以写一些像:
var validData = ((PrimaryUseTable)e.Results).PrimaryUse.Intersect(DropDownList.Items.AsEnumerable())
if(validData.Any())
{
//Do Stuff
}
else
// Alternate Stuff
答案 1 :(得分:0)
您应该能够在代码隐藏中使用Eval()来获取此值。但有一个问题是,我认为你试图在错误的地方做这个...你需要在OnDataBinding(或OnItemDataBound等)中为数据控件而不是DropDownList做这个。 DropDownList事件将没有正确的上下文,这可能是您遇到问题的原因。