无法手动将项目添加到通过列表迭代填充的列表框

Posted

技术标签:

【中文标题】无法手动将项目添加到通过列表迭代填充的列表框【英文标题】:Can't manually add item to listbox that is populated iterating through a list 【发布时间】:2020-10-04 23:43:19 【问题描述】:

在 C# WinForms 项目中,我正在查询数据库以获取要填充列表框的值列表。该查询填充一个列表,然后我遍历它以将列表项添加到列表框。

lsNewValuesList = dbGetNewValueInfo.GetNewValuesDgvData(strNewValuesQuery);

foreach (string strItem in lsNewValuesList)

    lsBxNewValues.Items.Add(strItem);

完成后,我需要手动将一个项目添加到列表顶部,我正在通过 lsBoxNewValues.Items.Insert(0, "DELETE"); 执行此操作。但是当我运行它时,我会收到消息,

设置 DataSource 属性时无法修改项目集合。

这是错误的屏幕截图(澄清一些问题):

调查后,我了解到当列表框填充数据源时会出现错误,但我只是从字符串列表中填充它。从技术上讲,那是数据源吗?

我如何完成我想做的事情?

[更新]

好的,我做了一些摆弄,虽然没有解决我的问题,我尝试了以下方法:

lsNewValuesList = dbGetNewValueInfo.GetNewValuesDgvData(strNewValuesQuery);

lsNewValuesList.Insert(0, "DELETE");
lsBxNewValues.DataSource = lsNewValuesList;
//foreach (string strItem in lsNewValuesList)
//
//  lsBxNewValues.Items.Add(strItem);
//

我没有在 ListBox 中插入“DELETE”(这是我最初尝试并导致错误的方法),而是将其插入到 List 的索引 0 处,即 ListBox 的数据源,然后设置 ListBox 的数据源。 “DELETE”出现在 ListBox 中,但它与其余项目一起按字母顺序排列。我没有对列表或 ListBox 进行任何排序 - 但是,我在数据库查询中使用 ORDER BY。 Cyber​​Zeus 建议我在 ListBox 上使用Refresh(),但这没有任何效果。

【问题讨论】:

您是否在foreach 循环之间设置了DataSource 属性,然后调用Insert @mm8,不-GetNewValuesDgvData(),只运行一个填充lsNewValuesList的数据库查询。 您是否尝试将项目添加到lsNewValuesListlsBxNewValueslsNewValuesList 是什么?它看起来不像是一个控件。那是错字吗? GetNewValuesDgvData() 实际返回的是什么对象/集合?哪个对象/集合产生异常?为什么不设置lsBxNewValues.DataSource 而不是一次添加一项?或者,你呢? @Jimi,我正在尝试将“DELETE”添加到列表框的顶部。 'lsNewValuesListList<string>,我正在迭代以填充 ListBox,lsBoxNewValues。这些不是拼写错误(我知道,名称相似,但在任何一种情况下都不是拼写错误)。 GetNewValuesDgvData() 返回的对象是 List<string>。我得到了错误,lsBxNewValues.Items.Insert(0, "DELETE");,它是在填充 ListBox 的函数之后调用的。 你有一个错字,然后:在你的评论中,你刚刚写了lsBxNewValues.Items.Insert(0, "DELETE");,在你的问题lsNewValues.Items.Insert(0, "DELETE");。您正在某处设置(您的一个)ListBox(es) DataSource (lsBxNewValues.DataSource)。或者你指的是错误的对象。此时,你确定是哪个控件产生了异常吗? 【参考方案1】:

是的,字符串列表是一个数据源。 您必须将从数据库中检索到的数据添加到 ListBox 的数据源中。您可能需要刷新 ListBox。

【讨论】:

Cyber​​Zeus,您是说要执行 ListBox.DataSource = lsNewValuesList 之类的操作,然后将附加项目添加到列表框 (lsBxNewValues.Items.Insert(0, "DELETE");?

以上是关于无法手动将项目添加到通过列表迭代填充的列表框的主要内容,如果未能解决你的问题,请参考以下文章

迭代循环并将列表添加到新行或新列中的数据框

使用数组 C# WPF 中的项目填充列表框

PySpark - 将列表作为参数传递给 UDF + 迭代数据框列添加

如果不在列表中,则 MS 访问将项目添加到组合框

将每次迭代生成的数据框保存在列表中

在 python 中迭代列表和添加熊猫数据框列非常慢