2013-03-14 4 views
1

Я делаю программу, которая принимает пользовательский ввод и заполняет его в список. Эта часть отлично работает. Однако пользователю нужна возможность редактировать или удалять его ввод. Я не могу понять, как удалить элемент из списка. Вот код для заполнения списка:Мне нужно удалить элементы из списка

[Serializable] 
class Recipient 
{ 
    public string Fname { get; set; } 
    public string MInit { get; set; } 
    public string Lname { get; set; } 
    public string Suffix { get; set; } 
    public string Amount { get; set; } 
    public string Message { get; set; } 
    public string Custom { get; set; } 
    public string CardType { get; set; } 
} protected void btnToCart_Click(object sender, EventArgs e) 
{ 
    if (ValidateInput("Card Information")) 
    { SetUI("Your Shopping Cart"); } 
    else 
    { 
     return; 
    } 

    Recipient recipients = new Recipient(); 

    List<string> FName = (List<string>)ViewState["recipientList"]; 
    List<string> MInit = (List<string>)ViewState["recipientList"]; 
    List<string> LName = (List<string>)ViewState["recipientList"]; 
    List<string> Suffix = (List<string>)ViewState["recipientList"]; 
    List<string> Amount = (List<string>)ViewState["recipientList"]; 
    List<string> Message = (List<string>)ViewState["recipientList"]; 
    List<string> Custom = (List<string>)ViewState["recipientList"]; 
    List<string> CardType = (List<string>)ViewState["recipientList"]; 

    if (FName == null && MInit == null && LName == null && Suffix == null && Amount == null && 
      Message == null && Custom == null && CardType == null) 
    { 
     FName = new List<string>(); 
     MInit = new List<string>(); 
     LName = new List<string>(); 
     Suffix = new List<string>(); 
     Amount = new List<string>(); 
     Message = new List<string>(); 
     Custom = new List<string>(); 
     CardType = new List<string>(); 
    } 

    recipients.Fname = txtFName.Text; 
    recipients.MInit = txtMInit.Text; 
    recipients.Lname = txtLName.Text; 
    recipients.Suffix = ddlSuffix1.SelectedItem.ToString(); 
    recipients.Amount = txtAmount.Text; 
    recipients.Message = ddlMessage.SelectedItem.ToString(); 
    recipients.Custom = txtCustom.Text; 
    recipients.CardType = lblImage.Text; 
    FName.Add(recipients.Fname); 
    MInit.Add(recipients.MInit); 
    LName.Add(recipients.Lname); 
    Suffix.Add(recipients.Suffix); 
    Amount.Add(recipients.Amount); 
    Message.Add(recipients.Message); 
    Custom.Add(recipients.Custom); 
    CardType.Add(recipients.CardType); 
    ViewState["recipientList"] = FName; 
    ViewState["recipientList"] = MInit; 
    ViewState["recipientList"] = LName; 
    ViewState["recipientList"] = Suffix; 
    ViewState["recipientList"] = Amount; 
    ViewState["recipientList"] = Message; 
    ViewState["recipientList"] = Custom; 
    ViewState["recipientList"] = CardType; 

    if (FName.Count == 1 && MInit.Count == 1 && LName.Count == 1 && Suffix.Count == 1) 
    { 
     lblCartName.Text = FName[0] + " " + MInit[0] + " " + LName[0] + " " + Suffix[0]; 
     lnkEdit1.Visible = true; 
    } 

    if (Amount.Count == 1 && Message.Count == 1 && Custom.Count == 1) 
    { 
     lblCartAmount.Text = "$" + Amount[0] + ".00"; 
     if (txtCustom.Text == string.Empty) 
     { 
      lblCartMessage.Text = Message[0]; 
     } 
     else 
     { 
      lblCartMessage.Text = Custom[0]; 
     } 
    } 

Да есть больше, но в любом случае, когда пользователь нажимает на следующую кнопку, то резюме отображается пользователю со всей введенной информации. Существует также две кнопки ссылки на форму, которая дает пользователю возможность редактирования или удаления. Я пробовал варианты:

FName.Remove (recipients.fname); и FName.RemoveAt (0), например, и ни одна из них не сработала. Так что это моя проблема, любая помощь будет очень признательна. Благодаря

+1

Вы перезаписать тот же элемент в 'ViewState' при вызове' ViewState [ "recipientList"] = бла ' –

+7

этот пример дал мне головную боль – TalentTuner

+1

Я уверен, что у вас есть причины для этого, но разве было бы проще создать« Список », чем отдельные списки каждого поля? –

ответ

0

Как @ rich.okelly написал вы перезаписать ViewState: использовать что-то вроде этого:

List<string> FName = (List<string>)ViewState["recipientListFName"]; 
List<string> MInit = (List<string>)ViewState["recipientListMInit"]; 
List<string> LName = (List<string>)ViewState["recipientListLName"]; 
List<string> Suffix = (List<string>)ViewState["recipientListSuffix"]; 
List<string> Amount = (List<string>)ViewState["recipientListAmount"]; 
List<string> Message = (List<string>)ViewState["recipientListMessage"]; 
List<string> Custom = (List<string>)ViewState["recipientListCustom"]; 
List<string> CardType = (List<string>)ViewState["recipientListCardType"]; 
+0

Спасибо Слава и Рич. Я сделал изменения, как вы предложили, и я вижу, как это работает намного лучше. Тем не менее, я все еще не могу удалить элементы из списка при нажатии кнопки «Редактировать». Любые мысли или направления были бы весьма признательны. Еще раз спасибо. – Chris

+0

Я ничего не понимаю, я предполагаю, что вы делаете что-то вроде этого: 'Список FName = (Список ) ViewState [" recipientListFName "]; FName.RemoveAt (0); ' – Slava

+0

Я действительно понял это. Я не знал, что ViewState можно было бы назвать где угодно в моем программировании. Таким образом, я смог вызвать его в моей кнопке редактирования и заполнить соответствующие поля ввода по мере необходимости. Спасибо за вашу помощь. – Chris