1

我正在创建一个礼品卡应用程序,用户将收件人信息输入到文本框中。该应用程序允许用户添加另一张礼品卡(最多 5 次)。我正在尝试找到一种方法将文本框输入添加到我可以稍后调用的数组或数组列表中,并将该信息显示在他们的“购物车”中。该应用程序在 C# 中,在 Visual Studio 2012 中有一个 webform 平台。到目前为止,对于 arraList,我有:

private ArrayList arrayList = new ArrayList();

protected void Page_Load(object sender, EventArgs e)
{
}

protected void btnEnter_Click(object sender, EventArgs e)
{
   arrayList.Add(txtFName.Text);

   if (arrayList.Count == 1)
   {
      lblFName.Text = arrayList[0].ToString();
   }

   if (arrayList.Count == 2)
   {
      lblFName.Text = arrayList[0].ToString();
      lblFName1.Text = arrayList[1].ToString();
   }
}

我相信我只需要一种方法来增加数组中的输入,但我不知道该怎么做。任何有关其他途径的帮助或建议将不胜感激

这是收件人信息面板和购物车面板的代码。//

收件人信息:

需要提供将收到 Visa 预付卡的人的姓名。名字会出现在卡片上。

*名字:

中间名首字母:

*姓:

后缀:Jr. Sr. II III IV    

名字、中间名首字母、姓氏和后缀的组合不能超过 26 个字符。

礼品卡信息:


必须是 25.00 美元到 500.00 美元之间的整数,不带美元符号或小数。

*输入金额:

个性化消息:所有最好的一路顺风祝贺你毕业好运周年快乐生日快乐因为刚刚结婚圣诞快乐季节问候谢谢你

或选择   
自定义消息:



  • 取消
  • 背部
  • 继续
//

    //<asp:Panel ID="pnlCart" runat="server" Width="100%" Visible="false">
        <asp:Panel ID="Panel1" runat="server" GroupingText="Card Choice 1" ForeColor="DarkBlue" Font-Bold="True" BorderStyle="NotSet" BorderColor="#E0E0E0">
            <div class="container">
                <div class="pair">
                    <div class="labelLeftBold">
                        Amount:
                    </div>
                    <div class="fieldRight">
                        <asp:Label ID="lblCartAmount" runat="server" Font-Bold="true"></asp:Label>
                    </div>
                    <br />
                    <br />
                    <div class="labelLeftBold">
                        Card Design: 
                    </div>
                    <div class="imgCard">
                        <asp:Image ID="imgCardChoice1" runat="server" />
                    </div>
                    <div class="fieldRight">
                        <asp:Label ID="lblCartDesign" runat="server" Font-Bold="true"></asp:Label>
                    </div>
                    <br />
                    <br />
                    <div class="labelLeftBold">
                        Name on Card: 
                    </div>
                    <div class="fieldRight">
                        <asp:Label ID="lblCartName" runat="server" Font-Bold="true"></asp:Label>
                    </div>
                    <br />
                    <br />
                    <div class="labelLeftBold">
                        Message on Card: 
                    </div>
                    <div class="fieldRight">
                        <asp:Label ID="lblCartMessage" runat="server" Font-Bold="true"></asp:Label>
                    </div>
                    <br />
                    <br />
                </div>
            </div>
        </asp:Panel>
        <br />
        <div class="container1">
            <asp:Panel ID="Panel2" runat="server" GroupingText="Card Choice 2" ForeColor="DarkBlue" Font-Bold="True" BorderStyle="NotSet" BorderColor="#E0E0E0">
                <div class="pair">
                    <br />
                    <div class="labelLeftBold">
                        Amount: 
                    </div>
                    <div class="fieldRight">
                        <asp:Label ID="lblCartAmount1" runat="server" Font-Bold="true"></asp:Label>
                    </div>
                    <br />
                    <br />
                    <div class="labelLeftBold">
                        Card Design: 
                    </div>
                    <div class="imgCard">
                        <asp:Image ID="imgCardChoice2" runat="server" />
                    </div>
                    <div class="fieldRight">
                        <asp:Label ID="lblCartDesign1" runat="server" Font-Bold="true"></asp:Label>
                    </div>
                    <br />
                    <br />
                    <div class="labelLeftBold">
                        Name on Card: 
                    </div>
                    <div class="fieldRight">
                        <asp:Label ID="lblCartName1" runat="server" Font-Bold="true"></asp:Label>
                    </div>
                    <br />
                    <br />
                    <div class="labelLeftBold">
                        Message on Card: 
                    </div>
                    <div class="fieldRight">
                        <asp:Label ID="lblCartMessage1" runat="server" Font-Bold="true"></asp:Label>
                    </div>
                    <br />
                    <br />
                </div>
           // </asp:Panel>
4

4 回答 4

0

如果只有 5 个值,那么你可以这样做。

string[] values = new string[5];

values[0] = lblFName.Text;
values[1] = lblFName2.Text; // etc

然后设置文本框值使用这个

lblFName.Text = values[0];
lblFName2.Text = values[1];

values[i] 是否等于 null 并不重要,因为 string 可以是 null 值。

于 2013-03-08T15:35:01.257 回答
0

为什么不使用List?

private void button1_Click(object sender, EventArgs e)
{
   Control[] aryCtrl = new Control[] { textBox1, textBox2, textBox3, dropdownlist1, dropdownlist2, dropdownlist3 };
   List<string> list = new List<string>();

   foreach (Control ctrl in aryCtrl)
   {
      list.Add(textbox1.Text);
      list.Add(textbox2.Text);
      list.Add(textbox3.Text);
      list.Add(dropdownlist1.Text);
      list.Add(dropdownlist2.Text);
      list.Add(dropdownlist3.Text);
   }
}

我创建一个Control[]数组:

Control[] aryCtrl = new Control[] { textBox1, textBox2, textBox3, comboBox1, comboBox2, comboBox3 };

我在我的foreach循环中使用它。接下来,正如我在原始答案中提到的,我创建了一个List对象来存储来自文本框/下拉列表的数据。最后,使用循环,我在数组foreach中旋转并添加每个控件的值。Control[].text

已编辑。这应该对你有用,OP!

于 2013-03-08T15:35:30.733 回答
0

好的。我想我明白你在这里想要做什么。

创建一个简单的类来存储数据。

 Class Recipient
 {
      string Name { get; set; }
      string CreditCardName { get; set; }
      string Amount { get; set; }
      string Message { get; set; }
 }

显然,您可以将数据类型更改为您想要的任何类型(即 Amount 可以是双精度)。

现在您拥有了您的控制数组(从技术上讲,您甚至不需要)和在button1_Click事件之外声明的收件人列表。

Control[] aryCtrl = new Control[] { 
                                   txtName, 
                                   cbxCreditCardName, 
                                   txtAmount, 
                                   txtMessage };

var recipients = new List<Recipient>();

private void button1_Click(object sender, EventArgs e)
{
    if (recipients.Count < 5)
    {
       var recipient = new Recipient();

       recipient.Name = txtName.Text;
       recipient.CreditCardName = cbxCreditCardName.SelectedValue;
       recipient.CreditCardNumber = txtCreditCardNumber.Text;
       recipient.Amount= txtAmount.Text;
       recipient.Message= txtMessage.Text;

       recipients.Add(recipient);
    }
    else {
         //Provide user with message telling them that they can only have up to 5 recipients.
    }
}

有办法从列表中删除收件人也是一个好主意。

于 2013-03-08T17:49:19.800 回答
0

感谢所有帮助过的人。我使用 ViewState 和其他一些修改解决了这个问题。

public partial class Test : System.Web.UI.Page
{
    [Serializable]
    class Recipient
    {
        public string name { get; set; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void btnEnter_Click(object sender, EventArgs e)
    {
        Recipient recipients = new Recipient();

        List<string> recipient = (List<string>)ViewState["recipientList"];


        if (recipient == null)
        {
            recipient = new List<string>();
        }
        recipients.name = txtFName.Text.Trim();
        recipient.Add(recipients.name);
        ViewState["recipientList"] = recipient;

        if (recipient.Count == 1)
        {
            lblFName.Text = recipient[0];
        }

        if (recipient.Count == 2)
        {
            lblFName1.Text = recipient[1];
        }

    }
于 2013-03-12T20:05:36.033 回答