如何获取复选框的实际名称而不是datarowview

时间:2019-03-12 14:52:20

标签: c# wpf xaml checkbox

如何遍历

加载的所有复选框
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() + "%'");
    }
}

1 个答案:

答案 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} "/>