简体   繁体   English

当DropDownList的SelectedValue为true时显示表

[英]Show Table when SelectedValue of DropDownList is true C#

I want to show a table when a SelectedValue of my DropDownList ddlKlasse is true. 当我的DropDownList ddlKlasse的SelectedValue为true时,我想显示一个表。 I'm using asp.net empty web forms with a masterpage. 我正在使用带有主页的asp.net空Web表单。 The idea is: 这个想法是:

  1. when ddlKlasse.SelectedValue = "2" table tblDubbelTwee must be shown 当ddlKlasse.SelectedValue =“ 2”时,必须显示表tblDubbelTwee
  2. when ddlKlasse.SelectedValue = "5" table tblVierMet must be shown 当ddlKlasse.SelectedValue =“ 5”时,必须显示表tblVierMet
  3. when ddlKlasse.SelectedValue = "9" table tblAchtMet must be shown 当ddlKlasse.SelectedValue =“ 9”时,必须显示表tblAchtMet

I get the values in my dropdownlist from my database. 我从数据库中获得下拉列表中的值。

The code I have now is: 我现在拥有的代码是:

In my Page_Load: 在我的Page_Load中:

protected void Page_Load(object sender, EventArgs e)
    {
        BindDropDownListKlasse();
        BindDropDownListVereniging();


        if (!Page.IsPostBack)
        {
            tblDubbelTwee.Visible = false;
            tblVierMet.Visible = false;
            tblAchtMet.Visible = false;


        }
    }

For binding the dropdown: 绑定下拉列表:

private void BindDropDownListKlasse()
    {
        try
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                using (SqlCommand com = new SqlCommand())
                {
                    com.CommandText = "SELECT DISTINCT AantalDeelnemers, Naam FROM Klasse;";
                    com.Connection = conn;
                    conn.Open();
                    SqlDataAdapter da = new SqlDataAdapter(com);
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    ddlKlasse.DataSource = dt;
                    ddlKlasse.DataValueField = "AantalDeelnemers";
                    ddlKlasse.DataTextField = "Naam";
                    ddlKlasse.DataBind();
                    conn.Close();

                    //Adding "Kies de klasse" optie in dropdownlist voor validatie
                    ddlKlasse.Items.Insert(0, new ListItem("Kies de klasse", "0"));
                }
            }
        }
        catch
        {

        }
    }

For showing the tables: 用于显示表格:

protected void ddlKlasse_SelectedIndexChanged(object sender, EventArgs e)
    {
        ListItem selectedListItemDubbelTwee = ddlKlasse.Items.FindByValue("2");
        if (selectedListItemDubbelTwee != null)
        {
            selectedListItemDubbelTwee.Selected = true;
            tblDubbelTwee.Visible = true;
            tblVierMet.Visible = false;
            tblAchtMet.Visible = false;
        };

        ListItem selectedListItemVierMet = ddlKlasse.Items.FindByValue("5");
        if (selectedListItemVierMet != null)
        {
            selectedListItemVierMet.Selected = true;
            tblVierMet.Visible = true;
            tblDubbelTwee.Visible = false;
            tblAchtMet.Visible = false;
        };

        ListItem selectedListItemAchtMet = ddlKlasse.Items.FindByValue("9");
        if (selectedListItemAchtMet != null)
        {
            selectedListItemAchtMet.Selected = true;
            tblAchtMet.Visible = true;
            tblDubbelTwee.Visible = false;
            tblVierMet.Visible = false;
        };
    }

My DropDownList: 我的DropDownList:

<div class="form-inline">
    <div class="form-group">
        <asp:DropDownList ID="ddlKlasse" class="form-control" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlKlasse_SelectedIndexChanged"></asp:DropDownList>
    </div>
</div>

One of my tables: 我的一张桌子:

<asp:Table ID="tblDubbelTwee" runat="server" class="table">
    <asp:TableHeaderRow>
        <asp:TableHeaderCell>Naam</asp:TableHeaderCell>
        <asp:TableHeaderCell>Email</asp:TableHeaderCell>
        <asp:TableHeaderCell>Lidmaatschapsnr</asp:TableHeaderCell>
    </asp:TableHeaderRow>

    <asp:TableRow>
        <asp:TableCell>
            <asp:TextBox ID="txtNaam" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
        <asp:TableCell>
            <asp:TextBox ID="txtEmail" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
        <asp:TableCell>
            <asp:TextBox ID="txtLidmaatschapsnr" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
    </asp:TableRow>
    <asp:TableRow>
        <asp:TableCell>
            <asp:TextBox ID="txtNaam2" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
        <asp:TableCell>
            <asp:TextBox ID="txtEmail2" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
        <asp:TableCell>
            <asp:TextBox ID="txtLidmaatschapsnr2" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
    </asp:TableRow>
</asp:Table>

But when I run my project and select a field in my DropDownList it gives the error: System.Web.HttpException: Selecting multiple items in a DropDownList is not allowed. 但是,当我运行项目并在DropDownList中选择一个字段时,会出现错误:System.Web.HttpException:不允许在DropDownList中选择多个项目。

Can you please help me to solve this problem? 您能帮我解决这个问题吗?

Your current handler for DDL index change is doing something very different from what you have described. 您当前的DDL索引更改处理程序所做的事情与您所描述的完全不同。 It basically checks if the list item exists in the ddl list (no matter selected or not) and then tries to select it. 它基本上检查列表项是否存在于ddl列表中(无论是否选中),然后尝试选择它。 Since all of 3 items exist, you are effectively trying to select 3 items, which is not allowed. 由于存在3个项目,因此您实际上是在尝试选择3个项目,这是不允许的。

What you might be looking for is a switch by selected value: 您可能正在寻找的是按选定值进行的切换:

switch (ddlKlasse.SelectValue)
{
    case "2":
            tblDubbelTwee.Visible = true;
            tblVierMet.Visible = false;
            tblAchtMet.Visible = false;
            break;
    case "5": //similar here
    case "9": //similar here
    default:
    // exception or something
}
refere this code  
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                bindgrid();

            }
        }

        void bindgrid()
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("select DISTINCT Class from addmitionform1", con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            con.Close();
            ddlclass.DataSource = ds;
            ddlclass.DataTextField = "Class";
            ddlclass.DataValueField = "Class";
            ddlclass.DataBind();
            ddlclass.Items.Insert(0, new ListItem("--Select--", "0"));

        }

protected void ddlKlasse_SelectedIndexChanged(object sender, EventArgs e)
    {
          string id = (ddlclass.SelectedValue.ToString());
            con.Close();
            SqlDataAdapter da1 = new SqlDataAdapter("Select id,FirstName from addmitionform1 where Class= '" + id + "'", con);
            //SqlDataAdapter da1 = new SqlDataAdapter("Select * from addmitionform1 ", con);
            DataSet ds1 = new DataSet();
            da1.Fill(ds1);
            GridView1.DataSource = ds1;
            GridView1.DataBind();
    }

First move BindDropDownListKlasse() and BindDropDownListVereniging() inside if (!IsPostBack) , as HarveySpecter suggested. 如HarveySpecter建议的那样,首先在if (!IsPostBack)内移动BindDropDownListKlasse()BindDropDownListVereniging()
And change ddlKlasse_SelectedIndexChanged() to: 并将ddlKlasse_SelectedIndexChanged()更改为:

protected void ddlKlasse_SelectedIndexChanged(object sender, EventArgs e)
{
    bool showDubbelTwee = false, showVierMet = false, showAchtMet = false;
    switch (ddlKlasse.SelectedValue)
    {
        case "2":
            showDubbelTwee = true;
            break;
        case "5":
            showVierMet = true;
            break;
        case "9":
            showAchtMet = true;
            break;
    }

    tblAchtMet.Visible = showVierMet;
    tblDubbelTwee.Visible = showDubbelTwee;
    tblVierMet.Visible = showVierMet;
}

What you are doing now in ddlKlasse_SelectedIndexChanged() is check for each value if it's present in the dropdown, and if present select it and show the respective table. 您现在在ddlKlasse_SelectedIndexChanged()是检查下拉列表中是否存在每个值,如果存在,请选择它并显示相应的表。
Instead, you need to check which value is selected and show the respective table. 相反,您需要检查选择了哪个值并显示相应的表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM