【发布时间】:2014-02-26 17:57:03
【问题描述】:
以下代码旨在在 c# .net 中设置 DataGridView 对象。它将填充对象并将“选定单元格”的前/后颜色设置为透明。双击特定行时,如果未设置该行,则应将背景颜色更改为绿色。如果设置了该行,它应该将背景颜色更改为白色。
出现两个问题:
1) 最初,数据网格的第一行被突出显示。它不是透明的,而是纯白色的。单击不同的行将解决此问题,并且下一个选定的行是透明的。
2) 执行双击后,数据网格不会将该行的背景更改为新颜色。除非选择另一行,否则它不会改变颜色。
我希望在双击操作时背景颜色立即发生变化。
我还希望初始选定的行是透明的。
能否修复我的代码,或者有更好的方法来达到预期的效果。
以下是我的代码的简化摘录。
创建一个 c# .net 项目,空白表单。
创建一个 DataGridView 对象 - 不要通过属性页设置任何参数。使用以下函数在表单构造函数中调用来设置表格:
const int TotalDummyData = 20;
/// <summary>
///
/// </summary>
private void CreateDGV()
{
dgv.Width = 420;
dgv.Columns.Add("h1", "Name");
dgv.Columns.Add("h2", "Value");
dgv.Columns[0].Width = 200;
dgv.Columns[1].Width = 200;
dgv.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
dgv.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgv.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable;
dgv.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;
for (int i = 0; i < TotalDummyData; i++)
{
DataGridViewRow dgvRow = new DataGridViewRow();
DataGridViewCell dgvCell1 = new DataGridViewTextBoxCell();
DataGridViewCell dgvCell2 = new DataGridViewTextBoxCell();
dgvCell1.Value = "dummy_data_name_" + i.ToString();
dgvCell2.Value = "dummy_data_value_" + i.ToString();
dgvRow.Cells.Add(dgvCell1);
dgvRow.Cells.Add(dgvCell2);
dgv.Rows.Add(dgvRow);
}
dgv.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgv.ColumnHeadersDefaultCellStyle.Font = new Font("Arial", 12.0f, FontStyle.Bold);
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.AllowUserToResizeColumns = false;
dgv.AllowUserToResizeRows = false;
dgv.ReadOnly = true;
dgv.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;
dgv.RowHeadersVisible = false;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.DefaultCellStyle.SelectionBackColor = Color.Transparent;
dgv.DefaultCellStyle.SelectionForeColor = Color.Transparent;
dgv.CellMouseDoubleClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgv_CellContentDoubleClick);
}
现在创建单元格双击功能 - 这将改变单元格背景颜色
bool[] DummyDataSet = new bool[20];
/// <summary>
///
/// </summary>
/// <param name ="sender"></param>
/// <param name ="e"></param>
private void dgv_CellContentDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
if(!DummyDataSet[e.RowIndex])
{
DummyDataSet[e.RowIndex] = true;
dgv.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.LightGreen;
}
else
{
DummyDataSet[e.RowIndex] = false;
dgv.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
}
【问题讨论】:
标签: c# .net datagridview transparent