2

我在 edititemtemplate 中有一个下拉列表控件,用于定义如下所示的详细信息视图:

<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"
4

2 回答 2

1

您想要检查数据源的 onDataBinding 事件处理程序中的有效值。成功的数据源数据绑定的结果是来自 EventArgs 的 List 强制转换。如果你知道一点 LINQ,你可以写一些类似的东西:

var validData = ((PrimaryUseTable)e.Results).PrimaryUse.Intersect(DropDownList.Items.AsEnumerable())
if(validData.Any())
{
  //Do Stuff
}
else
// Alternate Stuff 
于 2010-03-02T02:03:43.190 回答
0

您应该能够在代码隐藏中使用 Eval() 来获取此值。但是,一个问题是我认为您尝试在错误的地方执行此操作...您需要在数据控件的 OnDataBinding(或 OnItemDataBound 等)中执行此操作,而不是 DropDownList。DropDownList 事件将没有正确的上下文,这可能是您遇到问题的原因。

于 2010-03-02T00:58:02.387 回答