我一直在尝试找到一种方法,从所选的ListView
行读取数据,并在相应的TextBox
中显示每个值,以便于编辑。
第一个也是最简单的方法是这样的:
ListViewItem item = listView1.SelectedItems[0];
buyCount_txtBox.Text = item.SubItems[1].Text;
buyPrice_txtBox.Text = item.SubItems[2].Text;
sellPrice_txtBox.Text = item.SubItems[3].Text;
这段代码没有什么问题,但是我有大约40个或者更多的TextBoxes
应该显示数据。编码所有40个或者更多的代码会变得非常乏味。
我想出的解决方案是在我的用户控件中获取所有TextBox
控件,如下所示:
foreach (Control c in this.Controls)
{
foreach (Control childc in c.Controls)
{
if (childc is TextBox)
{
}
}
}
然后我需要循环选择的ListView
行的列标题。如果它们的列标题匹配TextBox.Tag,则在它们对应的TextBox中显示列值。
最终的代码看起来像这样:
foreach (Control c in this.Controls)
{
foreach (Control childc in c.Controls)
{
// Needs another loop for the selected ListView Row
if (childc is TextBox && ColumnHeader == childc.Tag)
{
// Display Values
}
}
}
所以我的问题是:如何循环遍历所选的ListView
行和每个列标题。
2条答案
按热度按时间z4iuyo4d1#
在您的
ColumnHeaders
上循环的简单方法如下:然而,你循环
TextBoxes
的方式并不是很好,即使它能工作。我建议你将每个参与的TextBoxes
添加到一个List<TextBox>
中。是的,这意味着添加40个项目,但你可以像这样使用AddRange
:要填充列表myBoxes:
或者,如果您真的希望避免
AddRange
,同时保持动态,您也可以编写一个小型递归..:现在,您的最后一个循环变得又小又快:
更新:由于您实际上需要
SubItem
值,因此解决方案可能如下所示:fruv7luv2#
试试这个来问候所有的价值观。