【问题标题】:Looping through all items in ListBox?循环遍历 ListBox 中的所有项目?
【发布时间】:2009-10-08 16:09:43
【问题描述】:

我有一个由以下代码填充的列表框:

  • lstOutcome.Items.Add(lstMap.SelectedItem.Text);

在列表框 lstOutcome 中,我需要能够循环遍历 列表框并能够获取 第一、第二等,列出项目。

我需要遍历每一行并抓住 该行的值是所以我可以使用其中的任何值 该行用于填充其他内容。

例如,在我的列表框中,我有:

  • 1
  • 2
  • 3

我需要能够遍历按钮上的列表框 单击并将值分配给 txtboxes:

  • textbox1.Text = '列表框中的项目 1';
  • textbox2.Text = '列表框中的项目 2';
  • textbox3.Text = '列表框中的项目 3';

我不确定我是否需要一个数组或者这怎么可能 完成。这个例子的重点是我将 实际上是使用列表框中的项目来映射列。一世 我正在导入 Microsoft Excel 电子表格。在 lstMap 我有 列名,我试图让列名匹配 我的数据库。使用此代码,我正在尝试获取值 列表框:

foreach(object li in lstOutcome.Items)
{
    bulkCopy.DestinationTableName = "Customers";
    //Amount to bulkcopy at once to prevent slowing with large imports.
    bulkCopy.BatchSize = 200;
    SqlBulkCopyColumnMapping map1 = new SqlBulkCopyColumnMapping(li.ToString(), "CustomerID");
    bulkCopy.ColumnMappings.Add(map1);

【问题讨论】:

  • 实际上这是一个假设的例子,我将获取列表项的值并将它们插入到列映射中,但是如果你这样想的话,永远不会有比文本框更多的项目
  • 看到我在更新后的意思了吗?列表框中的列永远不会比数据库中的列多,但是我觉得这个解决方案很容易,我只是不知道如何遍历列表框并抓取每个列表项并为其分配一个值,例如抓取文本 1从列表框中并为其分配一个数组中的值
  • 它是 ASP.Net。没有其他框架有 ListBoxItem 类(lstMap.SelectedItem.Text,靠近顶部)

标签: c# .net asp.net arrays listboxitem


【解决方案1】:

您需要将文本框放在一个数组中,如下所示:

Textbox[] textboxes = new Textbox[] { textbox, textbox2, textbox3 };

for (int i = 0; i < listBox1.Items.Count; i++) {
    textboxes[i].Text = "Item: " + listBox1.Items[i].ToString();
}

请注意,如果列表框中的项目超过三个,这将失败,因为它将用完文本框。如需更完整的解决方案,请添加一些上下文。文本框有什么用?列表框中的数据是从哪里来的?

【讨论】:

  • 好的,我明白你在说什么。我要做一点调整。
  • meh 无法正常工作,无法与 SqlBulkCopyColumnMapping 交换文本框
【解决方案2】:

一个更有效的方式来写你的答案是这样的:

static readonly string[] FieldNames = new string[] { "CustomerID", "Name", "Address", ..., "Email" };

using(SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString, options)) {

    bulkCopy.DestinationTableName = "Customers";
    //amount to bulkcopy at once to prevent slowing with large imports
    bulkCopy.BatchSize = 200;

    for(int i = 0; i < FieldNames.Length; i++) {
        bulkCopy.ColumnMappings.Add(
            new SqlBulkCopyColumnMapping(lstOutcome.Items[i].ToString(), FieldNames[i])
        );
    }
}

【讨论】:

    【解决方案3】:

    我得到它的工作,看看这段代码amigo的

    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString, options))
                        {
                            ArrayList myList = new ArrayList();
                            foreach (ListItem li in lstOutcome.Items)
                            {
                                myList.Add(li);
                            }
                            bulkCopy.DestinationTableName = "Customers";
                            //amount to bulkcopy at once to prevent slowing with large imports
                            bulkCopy.BatchSize = 200;
                            SqlBulkCopyColumnMapping map1 = new SqlBulkCopyColumnMapping(myList[0].ToString(), "CustomerID");
                            bulkCopy.ColumnMappings.Add(map1);
                            SqlBulkCopyColumnMapping map2 = new SqlBulkCopyColumnMapping(myList[1].ToString(), "Name");
                            bulkCopy.ColumnMappings.Add(map2);
                            SqlBulkCopyColumnMapping map3 = new SqlBulkCopyColumnMapping(myList[2].ToString(), "Address");
                            bulkCopy.ColumnMappings.Add(map3);
                            SqlBulkCopyColumnMapping map4 = new SqlBulkCopyColumnMapping(myList[3].ToString(), "City");
                            bulkCopy.ColumnMappings.Add(map4);
                            SqlBulkCopyColumnMapping map5 = new SqlBulkCopyColumnMapping(myList[4].ToString(), "State");
                            bulkCopy.ColumnMappings.Add(map5);
                            SqlBulkCopyColumnMapping map6 = new SqlBulkCopyColumnMapping(myList[5].ToString(), "ZipCode");
                            bulkCopy.ColumnMappings.Add(map6);
                            SqlBulkCopyColumnMapping map7 = new SqlBulkCopyColumnMapping(myList[6].ToString(), "Phone");
                            bulkCopy.ColumnMappings.Add(map7);
                            SqlBulkCopyColumnMapping map8 = new SqlBulkCopyColumnMapping(myList[7].ToString(), "Email");
                            bulkCopy.ColumnMappings.Add(map8);
    

    【讨论】:

    • 您不需要创建 ArrayList。相反,您可以写lstOutcome.Items[4].ToString()。此外,您不需要为每个映射使用单独的变量。相反,你可以写bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(...))
    猜你喜欢
    • 1970-01-01
    • 2013-07-20
    • 2018-10-23
    • 2021-04-21
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2021-05-31
    相关资源
    最近更新 更多