Изменить порядок чисел в общем списке

#c# #asp.net #list #generic-list

#c# #asp.net #Список #общий список

Вопрос:

Я не уверен, что заголовок моего вопроса синхронизирован с содержанием моего вопроса.

У меня есть выпадающий список, источником данных которого являются List<int> номера списка; При нажатии кнопки Удаления номера из выпадающего списка удаляются, а при нажатии кнопки Добавления номера добавляются в выпадающий список.

Теперь, если в моем выпадающем списке есть 1, 2, 3, и если я удалю 1, я хочу, чтобы числа 2 и 3 были заменены на 1 и 2. Я не уверен, как это сделать. Может кто-нибудь, пожалуйста, помогите мне?

    if(!IsPostBack)
    {
     List<int> numbers = new List<int>();
            Session["data"] = numbers;
      rest of other code....
     }

   protected void btnAddDetail_Click(object sender, EventArgs e)
    {
        numbers = (List<int>)Session["data"];
        if (numbers == null) { numbers = new List<int>(); }
        if (numbers.Count!=0)
        {
            int max = numbers.Max();
            numbers.Add(max   1);
            drpdown1.DataSource = numbers;
            drpdown1.DataBind();
            drpdown1.SelectedValue = numbers.Max().ToString();
            Session["data"] = numbers;

        }
       }
     protected void btnDelete(object sender, EventArgs e)
     {
       numbers = (List<int>)Session["data"];
        int detailIndex = numbers.FindIndex(c => c == Convert.ToInt32      (deleteNo));
        numbers.RemoveAt(detailIndex);
        drpdown1.DataSource = numbers;
        drpdown1.DataBind();
         Session["data"] = numbers;
       }
  

Теперь, когда я повторно привязываю выпадающий список, я хочу, чтобы числа 2 и 3 были заменены на 1 и 2.

Комментарии:

1. Какой тип объекта является номером списка?

2. можете ли вы изменить список, удалить 3 и повторно связать выпадающий список?

3. Вы хотите, чтобы все числа сдвигались вверх при удалении меньшего числа? Будут ли когда-нибудь какие-либо пробелы в числовой последовательности? Не уверен, что понимаю, что происходит…

4. Если у вас в списке есть «1 2 3», и вы удаляете «2», ваш список будет иметь «1 2», но он не будет содержать структуру «1 ? 2». Список<int> не может содержать пустые элементы. Сначала у вас есть список из трех элементов, а после удаления одного (любого) у вас есть список с двумя элементами. Если вам нужно сохранить индексы, вам придется применить другой подход. Если нет, просто исключите наибольшее число, верно?

Ответ №1:

Если я понимаю, что вы пытаетесь сделать, попробуйте использовать индексный массив:

поместите эти два элемента управления на страницу aspx:

 <asp:DropDownList ID="ddlNumbers" runat="server" />
<asp:Button id="btnRemove" runat="server" />
  

поместите этот код в свой code-behind:

 public ArrayList  Numbers
{
    get
    {
        return (ArrayList)this.ViewState["Numbers"];
    }
    set
    {
        this.ViewState["Numbers"] = value;
    }
}

protected override void OnInit(EventArgs e)
{
    this.btnRemove.Click  = new EventHandler(btnRemove_Click);
    base.OnInit(e);
}

void btnRemove_Click(object sender, EventArgs e)
{
    this.Numbers.RemoveAt(Convert.ToInt32(this.ddlNumbers.SelectedValue));
    this.BindList();
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        this.Numbers = new ArrayList();
        for (int i = 0; i < 10; i  )
        {
            this.Numbers.Add(i);
        }
        this.BindList();
    }
}

private void BindList()
{
    this.ddlNumbers.Items.Clear();
    for (int i = 0; i < this.Numbers.Count; i  )
    {
        this.ddlNumbers.Items.Add((i   1).ToString());
    }
}