Miguel Araujo
Miguel Araujo

Reputation: 41

How to make my dropdownlist have always the same index selected

So I want to make my dropdownlist to have always the same index selected, for example I have a gridview and I have a pager on it, if I change the page the index I had in my dropdownlist resets and I can give other example, I have a search textbox in my page and if I search something on it when I press enter the dropdownlist resets once again. How can I make my dropdownlist to have always the same selected index?

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

Upvotes: 0

Views: 124

Answers (1)

Chetan
Chetan

Reputation: 6891

In Page_Load code, I see that you are loading data in dropdownlist. When the page is submitted, Page_Load will execute and it will reload the data in the dropdown list. That's why selection goes off.

You should load the data in the dropdown list only during first load of the page. As you are doing with LoadGrid(). During post back the data of the dropdown and selection will be maintained if you don't reload them.

So I suggest following code change for loading data in dropdown list.

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

I hope this will help you solve your problem.

Upvotes: 1

Related Questions