C#/WPF:如何以编程方式创建所需数量的文本块以显示表中的数据
Posted
技术标签:
【中文标题】C#/WPF:如何以编程方式创建所需数量的文本块以显示表中的数据【英文标题】:C# / WPF : how can I programatically create as many texblocks as needed to show data from a table 【发布时间】:2022-01-15 10:32:26 【问题描述】:我正在尝试用包含表中值的文本块填充组合框。
我想创建与选择返回的数据行集中的行一样多的文本块。
然后将这些文本块添加到组合框。
有人能告诉我这是怎么做到的吗?
这是我的代码:
// instead of doing this I'd rather create them as needed.
TextBlock tbx1 = new TextBlock();
TextBlock tbx2 = new TextBlock();
TextBlock tbx3 = new TextBlock();
// Get all category 1
DataRow[] cutProblemsRow = gediDataSet.CutProblems.Select("CutProbCategId= " + 1);
// If there is any records
if (cutProblemsRow.Length > 0)
// create as many texblock as there are rows here
// cycle between rows
for (int i = 0; i < cutProblemsRow.Count(); i++)
// Assign value to textblock
TextBlock.Text = cutProblemsRow[i]["Problem"].ToString();
// Add the texblock created to the ComboBox
cmbxProblem.Items.Add(tbx1);
cmbxProblem.Items.Add(tbx2);
cmbxProblem.Items.Add(tbx3);
【问题讨论】:
将字符串集合分配给 ComboBox 的 ItemsSource 属性。您根本不需要创建任何 TextBlock。 可能是这样的:cmbxProblem.ItemsSource = gediDataSet.CutProblems.Select("CutProbCategId= " + 1).Select(dr => dr["Problem"].ToString()).ToList();
感谢您的建议。我在与另一位程序员进行头脑风暴时找到了解决方案。
如何将 CutProbCategId 添加为选定值而不是组合框中的文本?我想在组合框中添加键值对。
【参考方案1】:
正如 Clemens 和 zaggler 建议的那样,最好的方法是:
private void AddProblemCategtoCombobox(int categ)
// clear list
cmbxProblem.ItemsSource = null;
// get list
cmbxProblem.ItemsSource = gediDataSet.CutProblems.Select("CutProbCategId= " + categ).Select(dr => dr["Problem"].ToString()).ToList();
【讨论】:
请在您的 cmets 中也使用英语以上是关于C#/WPF:如何以编程方式创建所需数量的文本块以显示表中的数据的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式 ComboBox VirtualizingStackPanel WPF