我们如何将单个列表指定为gridview列?

时间:2013-07-25 07:56:46

标签: c# asp.net list gridview arraylist

我已就此主题进行了大量的Google搜索,但无法真正找到这个问题的正确答案。解决方案可能很简单,但我是C#ASP.NET的初学者。

我有一些代码正在将用户输入从下拉列表和文本框中存储并存储到其各自的List中。我试图在单个gridview中将这两个列表显示为单独的列。例如,当用户选择产品并输入数量并点击添加按钮时,它应该在网格视图的单行中显示详细信息。现在我已经将数据保存到列表中但无法将其显示在一行中。

这是我的代码:

    List<string> productIdList = new List<string>();
    List<string> productTemp = new List<string>();
    List<string> quantityList = new List<string>();
    List<string> quantityTemp = new List<string>();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            productTemp = (List<string>)ViewState["productId"];
            quantityTemp = (List<string>)ViewState["quantity"];

            string str1 = Convert.ToString(productTemp);
            string str2 = Convert.ToString(quantityTemp);

            if (str1 != "")
            {
                if (productTemp.Count != 0)
                {
                    foreach (string ids in productTemp)
                    {
                        productIdList.Add(ids);
                    }
                }
            }

            if (str2 != "")
            {
                if (quantityTemp.Count != 0)
                {
                    foreach (string qtys in quantityTemp)
                    {
                        quantityList.Add(qtys);
                    }
                }
            }
        }
    }

    protected void btnContinue_Click(object sender, EventArgs e)
    {
        productIdList.Add(ddlProduct.SelectedValue.ToString());
        quantityList.Add(txtQuantity.Text);
        ViewState["productId"] = productIdList;
        ViewState["quantity"] = quantityList;
        txtQuantity.Text = "";

        ArrayList testList = new ArrayList();

        testList.AddRange(productIdList);
        testList.AddRange(quantityList);

        grdTest.DataSource = testList;
        grdTest.DataBind();

        grdProduct.DataSource = productIdList;
        grdProduct.DataBind();

        grdQuantity.DataSource = quantityList;
        grdQuantity.DataBind();
    }

}

当前存在的gridview用于测试目的,以检查每次单击按钮后数据是否仍然存在。 grdTest是我用于尝试将列表显示为列的方法。

最终会是这样的:

名称数量
----- -----
NAME1(list1的)5(列表2)

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用Linq从以下两个列表中创建NameQty的对象列表

var temp = productIdList.Zip(quantityList, (n, w) => new { Name = n, Qty = w });

grdTest.DataSource = temp.ToList();
grdTest.DataBind();

Gridview您必须在一行中显示名称和数量,如果您将名称和数量加入一个列表,它将不会按预期显示(所有将显示在一列中)

我们可以使用Name和Qty作为属性创建新类,并通过迭代productIdList和quantityList来创建项列表。

详细了解Enumerable.Zip