2013-04-29 44 views
0

我有一个DropDownList填充了一组值。当我点击一个值时,DropDownList值应该保持该值,但是大部分时间它会重置为默认值(选择类型)。DropDownLists值重置

下面是DDL:

  <asp:TemplateField HeaderText="Criteria Type:" SortExpression="CriteriaType"> 
       <EditItemTemplate> 
        <asp:DropDownList ID="CriteriaType" AutoPostBack="True" runat="server" SelectedValue='<%# Bind("CriteriaType") %>'> 
         <asp:ListItem Value="0">Select a Type</asp:ListItem> 
         <asp:ListItem Value="TMEL Table">TMEL Table</asp:ListItem> 
         <asp:ListItem Value="Risk Matrix">Risk Matrix</asp:ListItem> 
         <asp:ListItem Value="Alarm Rationalization">Alarm Rationalization</asp:ListItem> 
        </asp:DropDownList> 
       </EditItemTemplate> 
       <InsertItemTemplate> 
        <asp:DropDownList ID="CriteriaType" AutoPostBack="True" runat="server" ViewStateMode="Enabled" 
         SelectedValue='<%# Bind("CriteriaType") %>'> 
         <asp:ListItem Value="0">Select a Type</asp:ListItem> 
         <asp:ListItem Value="TMEL Table">TMEL Table</asp:ListItem> 
         <asp:ListItem Value="Risk Matrix">Risk Matrix</asp:ListItem> 
         <asp:ListItem Value="Alarm Rationalization">Alarm Rationalization</asp:ListItem> 
        </asp:DropDownList> 
       </InsertItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("CriteriaType") %>'></asp:Label></ItemTemplate> 
      </asp:TemplateField> 

这里是后面的代码:

 protected void Page_Load(object sender, EventArgs e) 
    { 
     DropDownList criteriaType = (DropDownList)DetailsView1.FindControl("CriteriaType"); 
     if (criteriaType.SelectedValue == "TMEL Table") 
     { 
      DetailsView1.Fields[5].Visible = true; 
      DetailsView1.Fields[6].Visible = false; 
      DetailsView1.Fields[7].Visible = false; 

     } 
     else if ((criteriaType.SelectedValue == "Risk Matrix")) 
     { 
      DetailsView1.Fields[5].Visible = true; 
      DetailsView1.Fields[6].Visible = true; 
      DetailsView1.Fields[7].Visible = true; 
      DetailsView1.Fields[8].Visible = true; 
     } 
     else if ((criteriaType.SelectedValue == "Alarm Rationalization")) 
     { 
      DetailsView1.Fields[5].Visible = true; 
      DetailsView1.Fields[6].Visible = true; 
      DetailsView1.Fields[7].Visible = true; 
      DetailsView1.Fields[8].Visible = true; 
     } 
     else if (criteriaType.SelectedValue == "Select a Type") 
     { 
      DetailsView1.Fields[5].Visible = false; 
      DetailsView1.Fields[6].Visible = false; 
      DetailsView1.Fields[7].Visible = false; 
     } 
    } 

回答

2

确保您添加检查,如果它没有回传

protected void Page_Load(object sender, EventArgs e) 
{ 
     if(!IsPostBack) 
     { 
     DropDownList criteriaType = (DropDownList)DetailsView1.FindControl("CriteriaType"); 
     if (criteriaType.SelectedValue == "TMEL Table") 
     { 
      DetailsView1.Fields[5].Visible = true; 
      DetailsView1.Fields[6].Visible = false; 
      DetailsView1.Fields[7].Visible = false; 

     } 
     else if ((criteriaType.SelectedValue == "Risk Matrix")) 
     { 
      DetailsView1.Fields[5].Visible = true; 
      DetailsView1.Fields[6].Visible = true; 
      DetailsView1.Fields[7].Visible = true; 
      DetailsView1.Fields[8].Visible = true; 
     } 
     else if ((criteriaType.SelectedValue == "Alarm Rationalization")) 
     { 
      DetailsView1.Fields[5].Visible = true; 
      DetailsView1.Fields[6].Visible = true; 
      DetailsView1.Fields[7].Visible = true; 
      DetailsView1.Fields[8].Visible = true; 
     } 
     else if (criteriaType.SelectedValue == "Select a Type") 
     { 
      DetailsView1.Fields[5].Visible = false; 
      DetailsView1.Fields[6].Visible = false; 
      DetailsView1.Fields[7].Visible = false; 
     } 
    } 
    } 
+0

DropDownList的值现在保持不变,但没有操作字段。当我点击任何DDL值时,没有一个应该是可见的DetailsView1字段变得可见。 – puntubabu 2013-04-29 16:04:28

0

你知道如何IsPostBack事件工作和页面状态?基本上,控件在IsPostBack事件工作时刷新。

每次您从代码隐藏更新页面时,都会触发一段魔术般的Javascript,它会通过XMLHTTTP帖子(我认为)触发服务器,或者真正的硬帖子回到服务器,就像表单帖子。所以当服务器看到它时,它会检查IsPostBack标志,它就像一个添加到每个ASP.net页面的自动字段。

然后你检查IsPostBack标志来改变事物的状态。

如果您在IsPostBack = true中填充您的列表框,它将不会显示为可选项。如果你没有它填充你的ListBox,它会显示值不断变化。

这可能与在PostBack中设置选定值一样简单。

HTH