【发布时间】: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。 CyberZeus 建议我在 ListBox 上使用Refresh(),但这没有任何效果。
【问题讨论】:
-
您是否在
foreach循环之间设置了DataSource属性,然后调用Insert? -
@mm8,不-
GetNewValuesDgvData(),只运行一个填充lsNewValuesList的数据库查询。 -
您是否尝试将项目添加到
lsNewValuesList或lsBxNewValues?lsNewValuesList是什么?它看起来不像是一个控件。那是错字吗?GetNewValuesDgvData()实际返回的是什么对象/集合?哪个对象/集合产生异常?为什么不设置lsBxNewValues.DataSource而不是一次添加一项?或者,你呢? -
@Jimi,我正在尝试将“DELETE”添加到列表框的顶部。 '
lsNewValuesList是List<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)。或者你指的是错误的对象。此时,你确定是哪个控件产生了异常吗?
标签: c# winforms listbox datasource