如何使我的下拉列表始终选择相同的索引

How to make my dropdownlist have always the same index selected

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

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

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

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

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

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"];
}

希望本文能帮助您解决问题。