【问题标题】:How to make my dropdownlist have always the same index selected如何使我的下拉列表始终选择相同的索引
【发布时间】:2021-06-24 09:45:09
【问题描述】:

所以我想让我的下拉列表始终选择相同的索引,例如我有一个 gridview 并且我有一个寻呼机,如果我更改页面,我在下拉列表中的索引会重置,我可以给其他例如,我的页面中有一个搜索文本框,如果我在按 Enter 时在其上搜索某些内容,则下拉列表会再次重置。如何使我的下拉列表始终具有相同的选定索引?

asp.net

<asp:GridView ID="MyGrid" runat="server"
                    DataKeyNames="No_" AutoGenerateColumns="false" Style="color: Black; border-collapse: collapse; margin-right: auto; display: table; text-align: center;" OnPageIndexChanging="MyGrid_PageIndexChanging" OnRowDataBound="MyGrid_RowDataBound" AllowPaging="True" OnPageIndexChanged="MyGrid_PageIndexChanged" PageSize="10" AllowCustomPaging="False">

                    <Columns>
                        <asp:BoundField DataField="No_" HeaderText="No_Encomenda" />


                        <asp:TemplateField HeaderText="Select">
                            <ItemTemplate>
                                <asp:CheckBox ID="CheckBox1" runat="server" OnCheckedChanged="CheckBox1_CheckedChanged" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <PagerSettings Mode="NumericFirstLast" PageButtonCount="4" FirstPageText="First" LastPageText="Last" />
                    <PagerStyle CssClass="gridview" HorizontalAlign="Center" VerticalAlign="Middle" />
                </asp:GridView>

cs

SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["constring"].ConnectionString);
        List<string> MySelected;
         protected void Page_Load(object sender, EventArgs e)
    {
        ButtonBack.Visible = false;
        //GridView1.Visible = false;
        con.Open();
        SqlCommand cmd = new SqlCommand("Select bl from booking", con);
        SqlDataReader sdr = cmd.ExecuteReader();
        DropDownList1.Items.Clear();
        DropDownList1.Items.Add("-");

        if(IsPostBack == false)
        {
            while (sdr.Read())
            {
                DropDownList1.Items.Add(sdr.GetValue(0).ToString());
            }
        }

        if (IsPostBack == false)
        {
            MySelected = new List<string>();
            LoadGrid();
            ViewState["MySelected"] = MySelected;
        }
        else
        {
            MySelected = (List<string>)ViewState["MySelected"];
        }
        string user = Convert.ToString(Session["user"]);

        username.Text = user;

        if (Session["user"] == null || Session["login"] == null)
        {
            Response.Redirect("Login.aspx", false);
        }

        if (!Page.IsPostBack)
        {
            refreshdata();
            refreshdata();
        }
        con.Close();
    }
        public void LoadGrid()
        {
            SqlCommand cmd = new SqlCommand("select DISTINCT No_ from [EncomendaTEMP]", con);
            {

                DataTable rst = new DataTable();
                rst.Load(cmd.ExecuteReader());
                MyGrid.DataSource = rst;
                MyGrid.DataBind();
            }
        }
public void refreshdata()
        {
            SqlCommand cmd = new SqlCommand("select DISTINCT No_ from [EncomendaTEMP]", con);
            {

                DataTable rst = new DataTable();
                rst.Load(cmd.ExecuteReader());
                MyGrid.DataSource = rst;
                MyGrid.DataBind();
            }
        }

【问题讨论】:

  • 你能分享在 dropwonlist 中填充数据的代码吗?可以分享一下后面代码page_load的代码吗?
  • @ChetanRanpariya 当然
  • 您正在page_load 内的下拉列表中加载数据。这会将下拉列表重置为默认选择。您需要将加载下拉列表的代码放在if (IsPostBack == false) 块内。这样下拉菜单只会在第一次加载时填充。回发会将数据保留在下拉列表中,并且将保留选择。
  • @ChetanRanpariya 所以我只需要添加if (IsPostBack == false)
  • 是的..您需要在if(IsPostBack==false)中加载下拉列表

标签: c# asp.net webforms


【解决方案1】:

Page_Load 代码中,我看到您正在下拉列表中加载数据。当页面提交时,Page_Load 将执行并重新加载下拉列表中的数据。这就是选择消失的原因。

您应该仅在首次加载页面时加载下拉列表中的数据。正如您对LoadGrid() 所做的那样。在回发期间,如果您不重新加载它们,下拉列表和选择的数据将被保留。

所以我建议在下拉列表中加载数据的代码更改。

if(!IsPostBack)
{
    SqlCommand cmd = new SqlCommand("Select bl from booking", con);
    SqlDataReader sdr = cmd.ExecuteReader();
    DropDownList1.Items.Clear();
    DropDownList1.Items.Add("-");
        
    while (sdr.Read())
    {
       DropDownList1.Items.Add(sdr.GetValue(0).ToString());
    }
    
    MySelected = new List<string>();
    LoadGrid();
    ViewState["MySelected"] = MySelected;
}
else
{
    MySelected = (List<string>)ViewState["MySelected"];
}

我希望这能帮助您解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多