2014-02-26 50 views
1

我有一个表,它填充名为DropDownList_Tracking_Status的下拉列表。该表有3列; ID,TrackingName和Active。当我填充下拉列表时,我将每个记录的Active =“Y”拉出来。具有不存在的SelectedValue的DropDownList

当我将数据读入表单时,我试图为DropDownList_Tracking_Status预先选择适当的值。如果当前状态为空(尚未选择一个),则将其设置为2.否则,我将其设置为等于先前选择的任何值。我遇到的问题是,如果当前的跟踪状态是一个自从被标记为非活动状态(Active设置为“N”)的状态,则会引发错误。很明显,因为它不能预先选择下拉列表中不存在的值。

关于如何解决这个问题的任何想法?我当前的代码块看起来是这样的:

if ((DT["TrackingStatus"].ToString() == "")) 
{ 
    DropDownList_Tracking_Status.SelectedValue = "2"; 
} 
else 
{ 
    DropDownList_Tracking_Status.SelectedValue = (DT["TrackingStatus"].ToString()); 
} 

编辑 我只是要补充一点填充下拉列表的表是包含Active视野中的一个。称为DT的SqlDataReader在其中没有该字段。我想我可以创建一个查询来加入这两个并检查Active的值,但我希望有一个更简单的方法。东西说,(在伪代码):

If DropDownList_Tracking_Status.SelectedValue = (DT["TrackingStatus"].ToString()); throws you an error, do this instead... 
+0

'DT'是一个'DataRow'?抛出什么错误? –

+0

如果你的桌子只有2排?那么它会抛出错误。 –

+0

为什么不在逻辑之前检查当前的跟踪状态,如果它不存在于dropDown中,但需要添加它? – Srb1313711

回答

2

您可以将代码放在try-catch块中,

try 
{ 
DropDownList_Tracking_Status.SelectedValue = DT["TrackingStatus"].ToString(); 
} 
catch 
{ 
DropDownList_Tracking_Status.SelectedValue = "2"; 
} 

它将如果存在的话,否则它会通过异常值绑定,您可以在其中在ASIGN任何默认值catch块。

+0

整洁的解决方案,让+1 –

0

为以下可能的(可能由检查preceeded为空记录):

if ((DT["TrackingStatus"].ToString() == "")) 
{ 
    DropDownList_Tracking_Status.SelectedValue = "2"; 
} 
else if(DT["Active"] == "N") 
{ 
    DropDownList_Tracking_Status.SelectedValue = "2"; 
} 
else 
{ 
    DropDownList_Tracking_Status.SelectedValue = (DT["TrackingStatus"].ToString()); 
} 

UPDATE 加入活性场DT似乎是一个很好的解决方案,或者替代方法是查看下拉列表是否包含目标值。看到堆栈溢出问题here

+0

问题是活动字段位于包含所有可能的跟踪状态列表的表中。 DT是一个SqlDataReader。它读取具有实际数据的表格,因此我不知道如何在不使用其他数据读取器的情况下参考它。 –

相关问题