C# 如何在刷新数据c后取消标记dataGridView上的标题复选框?

C# 如何在刷新数据c后取消标记dataGridView上的标题复选框?,c#,winforms,checkbox,datagridview,C#,Winforms,Checkbox,Datagridview,选择时的标题复选框选中复选框列中的所有复选框。选中“标题”复选框后,当数据刷新时,它仍显示为标记在其上。 当点击Ok按钮时,我有以下代码,它在datagridview的header复选框和每行的所有复选框中加载数据。现在,选中选中选中所有行中所有复选框的标题复选框。然后,再次单击Ok按钮,它将重新加载数据,但header复选框上的复选标记仍将显示,而不是未选中 private void buttonOk_Click(object sender, EventArgs e)

选择时的标题复选框选中复选框列中的所有复选框。选中“标题”复选框后,当数据刷新时,它仍显示为标记在其上。 当点击Ok按钮时,我有以下代码,它在datagridview的header复选框和每行的所有复选框中加载数据。现在,选中选中选中所有行中所有复选框的标题复选框。然后,再次单击Ok按钮,它将重新加载数据,但header复选框上的复选标记仍将显示,而不是未选中

        private void buttonOk_Click(object sender, EventArgs e)
    {
        LoadDataGridView();

        CheckBox ckBoxHeader = new CheckBox();

        //Get the column header cell bounds
        Rectangle rect = datagridview1.GetCellDisplayRectangle(0, -1, true);
        rect.Y = 3;

        //align header check box in the middle center at rect.X = 82
        rect.X = (rect.Location.X + (rect.Width / 2)) - 10 ;

        ckBoxHeader.Size = new Size(18, 18);
        //Change the location of the CheckBox to make it stay on the header
        ckBoxHeader.Location = rect.Location;
        datagridview1.Columns[0].Frozen = true;

        ckBoxHeader.CheckedChanged += ckBoxHeader_CheckedChanged;

        //Add the CheckBox into the DataGridView
        datagridview1.Controls.Add(ckBoxHeader);
    }


   private void ckBoxHeader_CheckedChanged(object sender, EventArgs e)
    {
        for (int j = 0; j <= datagridview1.RowCount - 1; j++)
        {
            datagridview1[0, j].Value = ((CheckBox)sender).Checked;
        }
        datagridview1.EndEdit();

    }

它解决了我取消选中标题复选框的问题。为了使headerCheckBox.Checked=false,上述代码应重写如下:;正在工作: 加载事件代码-

    private void Form1_Load(object sender, EventArgs e)
    {
        addHeaderCheckBox();
        changeDataGridViewColumnReadonly();
        datagridview1.Columns[0].Frozen = true;            
    }
加载datagridview方法代码-

        private void LoadDataGridView()
    {
        DataTable dt = new DataTable();
        string WhereClause = " WHERE NO LIKE '" + textBoxNumber.Text.ToString().Substring(0,12) + "%' AND (DATE_TIME_START BETWEEN " + General.BuildOraDateString(dateTimePickerStart.Value) + " AND " + General.BuildOraDateString(dateTimePickerEnd.Value) + ") AND STATUS_IND = 'ST' ";

        dt = Unit.GetData(WhereClause);
        this.datagridview1.Refresh();
        this.datagridview1.DataSource = dt;

        headerCheckBox.Checked = false;

        headerCheckBox.MouseClick += new 
        MouseEventHandler(headerCheckBox_MouseClick);

        datagridview1.CellValueChanged +=
      new DataGridViewCellEventHandler(datagridview1_CellValueChanged);

        datagridview1.CurrentCellDirtyStateChanged +=
          new EventHandler(datagridview1_CurrentCellDirtyStateChanged);

        datagridview1.CellPainting +=
          new 
      DataGridViewCellPaintingEventHandler(datagridview1_CellPainting);
    }
确定按钮单击事件-

     private void buttonOk_Click(object sender, EventArgs e)
    {
        LoadDataGridView();
        totalCheckBoxes = dgvBaleDisposition.RowCount;

    }

如果没有任何代码来显示您迄今为止所做的尝试,就不可能帮助您。我们无法从头开始为您编写代码。请用代码说话。如果您对上述@Keyur Patel和@M Adeel Khalid of if any有任何提示,请立即添加代码。非常感谢。您能否先尝试一下简单的方法:添加一行ckBoxHeader.IsChecked=false;在ckBoxHeader.CheckedChanged+=ckBoxHeader\u CheckedChanged;之后;。您说在ok按钮中单击可以重新加载数据,但我看不到该方法的代码。无论如何,在按钮OK_中,单击可将复选框添加到网格中。如果单击该复选框,它将保持单击状态。您需要在重新加载数据并将其设置回false后获取该复选框。