如何遍历
加载的所有复选框public void loadTags()
{
DataTable dt = new DataTable();
using (SqlCommand selectTags = new SqlCommand("select tag from Categories", cs))
{
cs.Open();
using (SqlDataAdapter dataAd = new SqlDataAdapter(selectTags))
{
dt = new DataTable();
dataAd.Fill(dt);
}
cs.Close();
}
list1.ItemsSource = dt.DefaultView;
}
xaml:
<ListView Name="list1" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="307,52,0,0" Height="132" Width="293">
<ListView.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding tag}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
您知道如何使用循环获取所有标签名称(复选框)吗?
如果我将这些复选框直接硬编码到网格中,则此循环有效。但是,如果我直接从数据库中获取它们,则如果选中了这些复选框,则只会获取 System.Data.DataRowView 而不是 spo,inf,war等。
foreach (var items in list1.Items)
{
if (items.IsChecked == true)
{
list.Add("CategoryMulti like '%" + item.Content.ToString() + "%'");
}
}
答案 0 :(得分:2)
您可以在dt.DefaultView
字段中存储对DataView
的引用,也可以投射项目:
foreach (DataRowView item in list1.Items.OfType<DataRowView>())
{
//...
}
您仍然需要将IsChecked
的{{1}}属性的值存储在CheckBox
的列中。如果没有这样的列,则应在将其绑定到视图之前将其添加到DataTable
中:
DataTable
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Checked", typeof(bool)) { DefaultValue = false });
...
然后您可以像这样在循环中获取列的值:
<CheckBox Content="{Binding tag}" IsChecked="{Binding Checked} "/>