2010-07-08 48 views
1

我有一个使用datagridview的winforms应用程序。当我在编辑模式下访问单元格的EditedFormattedValue时,有时整个单元格会变黑。这是datagridview的功能,也许某种我需要关闭的验证功能?访问EditedFormattedValue时Datagridview单元格变黑?

我发现了其他一些提到这个问题,同时谷歌搜索。没有一个线程似乎知道答案是什么:

这里不调用Application.DoEvents解决了这个问题,但我没有调用DoEvents。
http://www.tek-tips.com/viewthread.cfm?qid=1277303&page=1

http://social.msdn.microsoft.com/Forums/en/winformsdatacontrols/thread/d9bf784d-617d-4a35-8125-fe8f67987fa2
这里没有人知道为什么发生,但响应者建议设置背景颜色为白色。这似乎是一个黑客,我想知道为什么会发生这种情况。另外,更改背景颜色并不会为我删除黑色背景。

添加人barlop

enter image description here

注意,这样做的另一个原因,但由于这里的标题是editedformattedvalue,我会首先注意到这个例子。

涉及EditedFormattedValue作为原因的示例。

(当你双击单元格,(从而进入编辑模式),它变黑)

namespace simpleblackdgv2 
{ 
    public partial class Form1 : Form 
    { 
     DataGridView dataGridView1 = new DataGridView(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

      // BUG IS THAT WHEN YOU DOUBLE CLICK A CELL, IT GOES BLACK 


      dataGridView1.Columns.Add("Column1", "Column1"); 

      dataGridView1.Rows.Add(1); 

      dataGridView1.AllowUserToAddRows = false; 


      this.Controls.Add(dataGridView1); 


      dataGridView1.EditingControlShowing += DataGridView1_EditingControlShowing; 

     } 

     private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
     { 

      // doesn't work 
      string str = dataGridView1.CurrentCell.EditedFormattedValue.ToString(); 



     } 


     } 
    } 

与此相关的,这是它的另一个例子去黑,虽然不是从editedformattedvalue(以前对这个问题的编辑有一个更长的例子,这是一个更简单的例子,可以更快地切入)。当一般的autosize设置开启 - 设置为allcells,并且一个特定的设置为None时,bug会显示问题,然后它可能会出现错误,这取决于您如何排列语句,这必须是一个错误。设置任何特定的自动调整大小时,将常规设置为关闭。

实施例黑有关调整

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Diagnostics; 

namespace blackdgvcellexample { 

public partial class Form1 : Form { 

    DataGridView dataGridView1; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

     // autosize rows may be meaningless without that. 
     //dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True; 

     dataGridView1 = new DataGridView(); 
     this.Controls.Add(dataGridView1); 

     dataGridView1.Columns.Add("Column1", "Column1"); 
     dataGridView1.Columns.Add("Column2", "Column2"); 
     dataGridView1.Columns.Add("Column3", "Column3"); 

     dataGridView1.AllowUserToAddRows = false; 


     dataGridView1.Rows.Add(5); 
     //dataGridView1.Rows.Add(1); 

     dataGridView1.EditingControlShowing += DataGridView1_EditingControlShowing; 


    } 


    private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 



     dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True; 


     //dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; //A 
     // dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; //B 
     // dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; //C 

     // B-Cols, C-rows 
     // A, ~B, ~C WORKS 
     // A,B, ~C WORKS 
     // A,~B,C WORKS 
     // A,B,C WORKS 
     // SO IT WAS THE ORDER OF THE LINES THAT MAKES A DIFFERENCE!!!! 


     // --- trying not turning any off 
     //   dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; //A 
     //   dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; //B   
     //   dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; //C 

     // Cols, Rows, A BLACK FIRST CELL REST FINE 
     // rows, Cols, A BLACK FIRST CELL REST FINE 
     // cols,A,rows FINE 
     // rows,A,cols BLACK FIRST CELL REST FINE 
     // A, rows, cols BLACK FIRST CELL 
     // A, cols, rows FINE 

     // perhaps unnecessary to autoaize rows. 

     dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; //A 

     dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 
     dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 


     // this works 
     /* 

dataGridView1.Columns [0] = .AutoSizeMode DataGridViewAutoSizeColumnMode.AllCells; //数据网格模型= */

 /* 
     * this works 
     dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 
     dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; //A    
     */ 

     /* 
      doesn't work 
     dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; //A    
      dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 
      */ 

     // doesn't work 
     // dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 
     // dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; //A    

     // so don't mix them. ok 

     // this doesn't work 

     //   dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; 
     //   dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; //A    


     // these 3 work in any order 
     // dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; 
     // dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; 
     // dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; //A    

     // don't mix them. 
     // if you are going to mix them, then turn the generals off and do specifics. 
     // this won't work 
     // dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 
     // dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 
     // dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; //A    

     // this works, probably any order too. 
     /* 
     dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; 
     dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; 
     dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;   
     dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;   
     dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
     */ 


    } 



} 


} 

所关乎https://connect.microsoft.com/VisualStudio/feedback/details/2878864/datagridview-cell-goes-black

+0

请注意,在调整列大小的示例中,可以通过缩小整个事物来避免(或者通过计算为什么它发生在只有一个列并解决这个问题时,虽然还没有找到答案) – barlop 2016-07-29 23:52:01

回答

3

好吧,虽然我一直无法弄清楚为什么这与str=dataGridView1.CurrentCell.EditedFormattedValue发生的事情,我发现,使用str=dataGridView1.EditingControl.Text价值得到相同的值,并没有按与单元格格式无关。所以,我想这解决了我的问题。

+1

未解决我的问题,但我可能有这种症状的几个来源。 – micahhoover 2014-04-01 14:08:51

+0

其实这确实解决了我的文本框和组合框的问题(必须做类似的设置单元格的东西(注意:必须检查单元格是在编辑模式中获取和设置),但如果我设置值一个图像单元我仍然得到黑盒子:( – micahhoover 2014-04-01 18:05:23

+1

我在C#WinForms应用程序中遇到了同样的问题,并改为使用EditingControl.Text修复了我的问题。 – Sophtware 2014-09-16 17:58:33