У меня есть приложение winforms, которое использует сетку данных.Когда я получаю доступ к EditedFormattedValue ячейки, когда она находится в режиме редактирования, иногда вся ячейка становится черной.Является ли это функцией представления данных, возможно, какой-то функцией проверки, которую мне нужно отключить?
Я нашел несколько других упоминаний этой проблемы во время поиска в Google.Похоже, что ни один из потоков не знает, что ответ на этот вопрос:
Здесь не вызывать 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](https://i.stack.imgur.com/SwrHT.png)
Обратите внимание, что есть еще одна причина этого, но поскольку заголовок здесь отредактирован formattedvalue, я сначала отмечу этот пример.
Пример использования 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 (предыдущее редактированиек этому вопросу есть более длинный пример, это более простой пример, который сокращает его быстрее).Ошибка показывает проблему, когда общие настройки автоматического изменения размера установлены на все ячейки, а конкретная установлена на Нет, тогда это может привести к ошибкам в зависимости от того, как вы упорядочите операторы, что должно быть ошибкой.При настройке любого конкретного автоматического размера установите для общего значения значение off.
Пример Black, связанный с изменением размера
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;// A
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.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;
*/
}
}
}
related- https://connect.microsoft.com/VisualStudio/feedback/details/2878864/datagridview-cell-goes-black