Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   ASP .Net (http://www.velocityreviews.com/forums/f29-asp-net.html)
-   -   Listbox.SelectedIndex is often 0, when it shouldn't be (http://www.velocityreviews.com/forums/t519922-listbox-selectedindex-is-often-0-when-it-shouldnt-be.html)

JRH 07-05-2007 10:12 PM

Listbox.SelectedIndex is often 0, when it shouldn't be
 
I have a page with a few controls, add and remove buttons, a text entry box, and a listbox. The listbox gets entries from a database:

Code:

protected void Page_Load(object sender, EventArgs e)
    {
        source = new DetailsDataSource();
        if (!Page.IsPostBack)
        {
            //Add companies to the list
            companies = DetailsDataSource.getByDetailNameandId(new int[] { 0 }, "company_name");
            ArrayList CompanyList = new ArrayList();
            foreach (DetailsObject detail in companies)
            {
                CompanyList.Add(detail.DetailValue);
                //lstCompaniesAdded.Items.Add(new ListItem(detail.DetailValue, detail.DetailName));
            }
           
            lstCompaniesAdded.DataSource = CompanyList;
            lstCompaniesAdded.DataBind();
        }       
    }

I add items and remove them when the buttons are clicked.
Code:

protected void AddCompany(object sender, ImageClickEventArgs e)
    {
        if (companyDetail.Text == "")
        {
            EntryError.Text = "Please type in detail information.";
            EntryError.Visible = true;
            return;
        }

        DetailsObject entry = new DetailsObject();
        entry.DetailValue = companyDetail.Text;
        entry.DetailName = "company_name";
        entry.SigID = 0;
        if (source.Insert(entry))
        {
            // Move the detail from the entry box to the read-only box
            lstCompaniesAdded.Items.Add(new ListItem(entry.DetailValue, entry.DetailName));
            companyDetail.Text = "";
            EntryError.Visible = false;
        }
        else
        {
            EntryError.Text = "That entry already exists.";
            EntryError.Visible = true;
        }
    }

    protected void RemoveCompany(object sender, ImageClickEventArgs e)
    {
        ArrayList list = new ArrayList();
        list.AddRange(lstCompaniesAdded.GetSelectedIndices());
        if (lstCompaniesAdded.SelectedIndex > -1)
        {
            DetailsObject entry = new DetailsObject();

            int total = lstCompaniesAdded.Items.Count;
            for (int i = 0; i < total; i++)
            {
                if (list.Contains(i))
                {
                    list.Remove(i);
                    entry.DetailValue = lstCompaniesAdded.Items[i].Text;
                    entry.DetailName = "company_name";
                    entry.SigID = 0;
                    if (source.Delete(entry.DetailValue, entry.DetailName))
                    {
                        lstCompaniesAdded.Items.RemoveAt(i);
                        i--;
                        total--;
                    }
                    else
                    {
                        this.EntryError.Text = "That entry could not be found.";
                        this.EntryError.Visible = true;
                    }
                }
            }
           
        }
    }

Also, here is the listbox (I did the enableviewstate thing because one other person's solution said to, but it hasn't changed anything.):
<asp:ListBox EnableViewState="true" ID="lstCompaniesAdded" runat="server" Width="459" Height="350" ReadOnly="true" ></asp:ListBox>

The problem isn't really in remove, it doesn't matter where I try to grab the index. I currently have the listbox set to only allow single selections. It works fine when nothing is added to the list before deleting. If the page loads and there are four items, the selected index is always correct. If I start adding values, then the index will be the oldest item added. For example:

List at first: 0 1 2 3
I add 4 and 5: 0 1 2 3 4 5
I select 5 and hit delete-> 0 1 2 3 5 four is gone.
Next it will delete 5, no matter what I pick.

If the list was empty, and then I added values, it will always delete the oldest.

I've seen a lot of people with similar problems, but I have yet to find a solution that works for me too.

Thank you very much.


All times are GMT. The time now is 08:07 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.