Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DataGridView C#windows应用程序(如果鼠标单击列标题,则第一行不选中复选框)_C#_.net_Visual Studio_Checkbox_Datagridview - Fatal编程技术网

DataGridView C#windows应用程序(如果鼠标单击列标题,则第一行不选中复选框)

DataGridView C#windows应用程序(如果鼠标单击列标题,则第一行不选中复选框),c#,.net,visual-studio,checkbox,datagridview,C#,.net,Visual Studio,Checkbox,Datagridview,谁能帮我一下吗。我开发了一个c#windows应用程序,其中DataGridView第一列有复选框。如果单击第一列标题,它将选中除第一行之外的所有行级别复选框。对于选择所有行级复选框,我有一个dataGridView1\u ColumnHeaderMouseClick事件,代码是: private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {

谁能帮我一下吗。我开发了一个c#windows应用程序,其中DataGridView第一列有复选框。如果单击第一列标题,它将选中除第一行之外的所有行级别复选框。对于选择所有行级复选框,我有一个dataGridView1\u ColumnHeaderMouseClick事件,代码是:

private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            foreach (DataGridViewColumn column in dataGridView1.Columns)
            {
                column.SortMode = DataGridViewColumnSortMode.NotSortable;
            }
            if (e.ColumnIndex == 0)
            {
                if (chek == 0)
                {
                    try
                    {
                        for (int i = 0; i < dataGridView1.RowCount; i++)
                        {
                            string paymentValue = dataGridView1.Rows[i].Cells[18].Value.ToString();
                            string incmngp = dataGridView1.Rows[i].Cells[20].Value.ToString();
                            if (paymentValue == "N" && incmngp =="")
                            {
                                dataGridView1.Rows[i].Cells[0].Value = 1;
                                chek = 1;
                            }
                        }
                        if (chek == 1)
                        {
                            btn_update.Text = "Update";
                        }
                    }
                    catch (Exception ) {  }
                }
                else if(chek==1)
                {
                    try
                    {
                        for (int i = 0; i < dataGridView1.RowCount; i++)
                        {
                            dataGridView1.Rows[i].Cells[0].Value = 0;
                            chek = 0;
                        }
                        if (chek == 0)
                        {
                            btn_update.Text = "OK";
                        }
                    }
                    catch (Exception) { }
                }
            }
private void dataGridView1\u ColumnHeaderMouseClick(对象发送者,DataGridViewCellMouseEventArgs e)
{
foreach(dataGridView1.Columns中的DataGridViewColumn列)
{
column.SortMode=DataGridViewColumnSortMode.NotSortable;
}
如果(e.ColumnIndex==0)
{
如果(chek==0)
{
尝试
{
对于(int i=0;i

注意:chek是在初始化阶段声明的变量

将数据网格视图的选择模式属性设置为ColumnHeaderSelect

并确保所有“文本”列的SortMode设置为NotSortable

更新2

在这种情况下,撤消我以前说过的所有内容,然后像这样做

将任何DataTable分配给dataGridView1之前

da.Fill(dt);
dataGridView1.DataSource = dt.DefaultView;
dataGridView1.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect;
     foreach(DataGridViewColumn dc in dataGridView1.Columns)
                {
                    dc.SortMode = DataGridViewColumnSortMode.NotSortable;
                }
 dataGridView1.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect;
更新3

为dataGridView1的ColumnHeaderMouseClick事件添加事件处理程序 如下

添加以下代码(如果要对任何一列复选框使用相同的功能,请使用通用代码)


这是Winforms中一个非常奇怪的错误。问题通常不适用于第一行,而是适用于DataGridViewCheckBoxCell任意行中的第一个选定单元格您可以通过单击复选框来选择复选框单元格,或者选择复选框外的单元格,其行为是相同的。如果在网格的中间选择3个复选框,则三个第一个将冻结并不能正确更新。方法调用,它仍然不起作用

正确的答案是在更改复选框数据后立即调用datagridview1.RefreshEdit()。不能在进行所有更改后才调用它。必须针对复选框值中的每个更改进行调用

foreach (DataGridViewRow row in Results.Rows)
    {
       var ck =  (DataGridViewCheckBoxCell) row.Cells["check"];
       ck.Value = ck.TrueValue;
       Results.RefreshEdit();
     }
    

是的……我们理解……而您的问题是?@SurajS第一行没有选择,如果我们单击列标题。但是从第二行到最后一行,所有复选框都没有选择第一行。@SurajS能否请您提供一个解决方案。在修改您给出的代码后,没有选择第一行。@SurajS我刚刚添加了.RefreshEdit()在我的代码下面,它现在可以正常工作了。感谢您的帮助。您对选择模式的建议与上面相同。但是,在DataGridView控件的SelectionMode设置为“自动”时,无法将引发列的SortMode错误设置为“自动”ColumnHeaderSelect@Naveen.A更新的回答谢谢你在这个问题上的努力。在t上仍然没有运气他的第一行没有选择是否单击列标题。图像供您参考。您能提供一个解决方案吗?非常感谢…我刚刚在我的代码下面添加了datagridview1.RefreshEdit(),现在工作正常
foreach (DataGridViewRow row in Results.Rows)
    {
       var ck =  (DataGridViewCheckBoxCell) row.Cells["check"];
       ck.Value = ck.TrueValue;
       Results.RefreshEdit();
     }