DropDownList,其SelectedValue不存在

时间:2014-02-26 14:09:23

标签: c# asp.net dropdownbox

我有一个表填充名为DropDownList_Tracking_Status的下拉列表。该表有3列; ID,TrackingName和Active。当我填写下拉列表时,我将每条记录拉到Active =“Y”。

当我在表单中读取数据时,我正在尝试为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...

2 个答案:

答案 0 :(得分:2)

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

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

它将绑定值,如果它存在,否则它将通过异常,您可以在catch块中对任何默认值进行设置。

答案 1 :(得分:0)

以下是否可行(可能在检查空记录之前):

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());
}

<强>更新 将Active字段添加到DT似乎是一个很好的解决方案,或者另一种方法是查看下拉列表是否包含目标值。请参阅Stack Overflow问题here