2017-07-17 49 views
0

可以請任何人幫助我。我開發了一個C#窗口應用程序,其中DataGridView的第一列有複選框。如果我點擊第一列標題,它會選擇除第一行之外的所有行級複選框。對於選擇所有行級複選框我有dataGridView1_ColumnHeaderMouseClick的事件和代碼是:
DataGridView C#窗口應用程序(如果鼠標點擊列標題,第一行不選擇複選框)

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) { } 
       } 
      } 

注:赤是在初始化階段聲明的變量

+1

是的......我們明白....你的問題是? –

+0

@SurajS第一行沒有選擇,如果我們點擊列標題。但從第二行到行的結尾,所有複選框都不是選中的第一行。 –

+0

@SurajS你能否爲此提供一個解決方案。修改代碼後,不要選擇第一行。 http://i.imgur.com/WihxVvK.png –

回答

0

設置數據網格的選擇模式屬性視圖ColumnHeaderSelect

enter image description here

和MAK Ë確保所有的 '文本' 列有SortMode設置爲NotSortable

enter image description here

更新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事件 像下面

enter image description here

,如果你想使用添加下面的代碼(通用代碼任何一列複選框都具有相同的功能)

private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
     { 
      //Enter your own column index here 
      if(e.ColumnIndex == 0) 
      foreach(DataGridViewRow row in dataGridView1.Rows) 
      foreach (DataGridViewCell cell in row.Cells) 
      { 
        //Check if the cell type is of a CheckBoxCell 
       if (cell.GetType() == typeof(DataGridViewCheckBoxCell)) 
       { 
        DataGridViewCheckBoxCell c = (DataGridViewCheckBoxCell)cell; 
        c.TrueValue = "T"; 
        c.FalseValue = "F"; 
        if (c.Value == c.FalseValue|| c.Value == null) 
        c.Value = c.TrueValue; 
        else 
         c.Value = c.FalseValue; 
       } 
      } 
      dataGridView1.RefreshEdit(); 
     } 
+0

感謝您的幫助。選擇模式與上述建議類似。但拋出一個錯誤**列的SortMode不能設置爲自動,而DataGridView控件的SelectionMode設置爲ColumnHeaderSelect ** –

+0

@ Naveen.A更新回答 –

+0

感謝您在這個問題上的努力。仍然沒有運氣在這第一行是不選擇,如果點擊列標題。圖片供您參考http://i.imgur.com/WihxVvK.png –

相關問題