从上一个问题开始,我在编辑后询问了与颜色文本相关的问题。现在已要求我不应突出显示已编辑的文本,而是更改背景颜色。
这就是我现在想要的。
DataGridView
DataGridView
将填充数据如何在DataGridView
?
这是我尝试通过改变单元格的背景颜色。
private void Gridview_Output_CellBeginEdit_1(object sender, DataGridViewCellCancelEventArgs e)
{
DataGridViewCell cell = Gridview_Output[e.ColumnIndex, e.RowIndex];
cell.Tag = cell.Value != null ? cell.Value : "";
if (cell.OwningColumn.Name == "ValueOut")
cell.Style.BackColor = Color.Yellow;
}
全球
List<DataGridViewCell> dgvc_List = new List<DataGridViewCell>();
保存按钮
private void btnSave_Click(object sender, EventArgs e)
{
dgvc_List.Add(cell);
foreach (DataGridViewCell d in dgvc_List)
{
d.Style.BackColor = Color.White;
}
dgvc_List.Clear();
}
答案 0 :(得分:0)
您可能希望使用TextChanged事件(https://msdn.microsoft.com/en-us/library/system.windows.forms.control.textchanged(v=vs.110).aspx)来检测用户何时更改TextBox的内容(您可能希望在此处应用某些逻辑以避免在加载数据时触发它控制)。当偶数触发时,您可以更改控件的背景颜色(https://msdn.microsoft.com/en-us/library/s2kh9x59(v=vs.110).aspx)
答案 1 :(得分:0)
在CellEndEdit上添加一个新事件:
private void Gridview_Output_CellEndEdit_1(object sender, DataGridViewCellCancelEventArgs e)
{
DataGridViewCell cell = Gridview_Output[e.ColumnIndex, e.RowIndex];
cell.Tag = cell.Value != null ? cell.Value : "";
if (cell.OwningColumn.Name == "ValueOut")
cell.Style.BackColor = Color.Yellow;
}
这是因为您在编辑完成之前调用了事件,而在您完成作业时,您真正想要的是显示不同的颜色。
答案 2 :(得分:0)
进一步说明Donbabbeo已回答......
我认为你只想改变背景仅在时实际更改了单元格值。使用Donbabbeo的答案将改变BackColor
,无论每次编辑发生,无论值是否发生变化。
我建议您同时使用CellBeginEdit
和CellEndEdit
个事件。
首先,您需要记住&#39;正在编辑的单元格的原始值。
string originalValue; // Define a global outside
private void Gridview_Output_CellBeginEdit_1(object sender, DataGridViewCellCancelEventArgs e)
{
originalValue = Gridview_Output[e.ColumnIndex, e.RowIndex].Value.ToString();
}
然后当您完成编辑时,请检查原始值,仅在实际更改时更改背景颜色
private void Gridview_Output_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
DataGridViewCell cell = Gridview_Output[e.ColumnIndex, e.RowIndex];
if (cell.Value.ToString() != originalValue)
{
cell.Style.BackColor = Color.Red;
}
}
如果您仍想检查OwningColumn.Name
是否为特定值或任何其他检查,请在检查原始值后再添加if
语句。
<强>更新强>
将细胞颜色更改回原始颜色应该完全按照Donbabbeo在评论中所描述的除非你正在处理一个非常大的DataGridView
然后它会更有效率创建一个通用的单元格列表,以便在更改完成时添加到然后当保存时只通过List<>
进行迭代以恢复。
它将被实现类似的东西。
首先,列表需要在
之外声明List<DataGridViewCell> dgvc_List = new List<DataGridViewCell>();
一旦声明了列表,您就会在确定该值与原始值不同并且BackColor
已更改后添加特定单元格。
在说CellEndEdit
事件中的颜色变化之后会直接添加以下内容。
dgvc_List.Add(cell);
随着每个确认的编辑,列表将继续增长,直到您准备好使用保存方法或其他任何您想要的方法,您可以调用以下内容
foreach (DataGridViewCell d in dgvc_List)
{
d.Style.BackColor = Color.White; // Or Any Color
}
dgvc_List.Clear(); // Clears the list ready to go again
从长远来看,它的编码要多一些,但效率要高得多。