0

我有一个 DropDownList 填充了一组值。当我单击一个值时,DropDownList 值应保持为该值,但大多数情况下它会重置为默认值(选择类型)。

这是 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;
        }
    }
4

2 回答 2

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;
        }
    }
  }
于 2013-04-29T15:51:48.820 回答
0

你知道 IsPostBack 事件是如何工作的和页面状态吗?基本上,当 IsPostBack 事件起作用时,控件会刷新。

每次从代码隐藏更新页面时,都会触发一段神奇的 Javascript,它要么通过 XMLHTTTP 帖子(我认为)到达服务器,要么是真正的硬回帖(如表单帖子)到达服务器。因此,当服务器看到它时,它会检查 IsPostBack 标志,它就像添加到每个 ASP.net 页面的自动字段。

然后检查 IsPostBack 标志以更改事物的状态。

如果您在 IsPostBack=true 中填充您的列表框,它似乎是不可选择的。如果您在没有它的情况下填充 ListBox,则该值会显示为不断变化。

这可能就像在 PostBack 中设置选择的值一样简单。

高温高压

于 2013-04-29T16:20:58.393 回答