Вопрос по wpf, checkbox – Заголовок столбца Datagrid должен проверять / снимать флажок состояния CheckBox в зависимости от того, отмечены ли все флажки CheckBox для столбца DataGridView.

9

enter image description here Проблема, с которой я застрял, связана с флажком в DataGrid (WPF). Я приложил снимок экрана для лучшего понимания проблемы.

Проблема: флажок столбца DataHeader установлен, даже если один из дочерних элементов не отмечен. Я ожидаю, что решение исправит это так, что когда один из дочерних элементов явно не проверяется пользователем, ALL (заголовок столбца) должен быть неявным образом отключен.

Пожалуйста, помогите, ребята ... Спасибо Пожалуйста, проверьте ссылку. Я хочу, чтобы решение работало так.http://www.codeproject.com/Articles/42437/Toggling-the-States-of-all-CheckBoxes-Inside-a-Dat#

<code><dg:DataGrid.Columns>
    <dg:DataGridCheckBoxColumn Binding="{Binding Check}" IsThreeState="True" Width="50">
        <dg:DataGridCheckBoxColumn.HeaderTemplate>
            <DataTemplate x:Name="dtAllChkBx">
                <CheckBox Name="cbxAll" Content="{x:Static properties:Resources.lblAll}"
                          Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" />
            </DataTemplate>
        </dg:DataGridCheckBoxColumn.HeaderTemplate>
    </dg:DataGridCheckBoxColumn>
</code>

.

<code>private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
    unchck_all_prd();
    dgEnggAcc.Items.Refresh();
}

private void unchck_all_prd()
{
    for (int i = 0; i < engg_list.Count; i++)
    {
        engg_list[i].Check = false;
    }
}

private void chck_all_prd()
{
    for (int i = 0; i < engg_list.Count; i++)
    {
        engg_list[i].Check = true;
    }
}

public class EnggLst : ObservableCollection<EnggLst>
{
    public bool Check { get; set; }
}
</code>

Ваш Ответ

2   ответа
1

<DataGridTemplateColumn.Header>
<CheckBox x:Name="ckbHeader" Click="ckbHeader_Click"></CheckBox>
</DataGridTemplateColumn.Header>

В вашем коде добавьте:

var ckbox = sender as CheckBox;
var All = Collection.View.SourceCollection as List<ObjectX>;

if (ckbox.IsChecked == true)
{
    foreach (var item in All)       
        item.Marked = true;     
}
else
{
    foreach (var item in All)       
        item.Marked = false;        
}
Collection.View.Refresh();

ПРИМЕЧАНИЕ. Отправитель - CheckBox.

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededtrueError: User Rate Limit Exceededif (ckbox.IsChecked)
4
//this event is for **Checked and UnChecked** of up check box (cbxall)
private void UpCheckbox_Checked(object sender, RoutedEventArgs e)
{
    //checkBox1 = cbxall (your up checkbox)
    if (checkBox1.IsChecked == true)
    {
        dataGrid1.Items.OfType<YourClass>().ToList().ForEach(x => x.IsChecked = true);
    }
    else
    {
        dataGrid1.Items.OfType<YourClass>().ToList().ForEach(x => x.IsChecked = false);
    }
}

//this event is for all other check box
//**Checked and UnChecked** of all other check box is this event
private void OtherCheckbox_Checked(object sender, RoutedEventArgs e)
{
    //checkBox1 = cbxall (your up checkbox)
    if (dataGrid1.Items.OfType<YourClass>().All(x => x.IsChecked == true))
    {
        checkBox1.IsChecked = true;
    }
    else if (dataGrid1.Items.OfType<YourClass>().All(x => x.IsChecked == false))
    {
        checkBox1.IsChecked = false;
    }
    else
    {
        checkBox1.IsChecked = null;
    }
}
Error: User Rate Limit Exceededckbox.IsChecked == trueError: User Rate Limit Exceededckbox.IsChecked ?? false

Похожие вопросы