背景
当我点击WinForm上的按钮时,我将数据加载到BindingSource中,该BindingSource充当DataGridView的数据源。加载数据后,我会对DataGridView进行一些修改;特别是,我1)将任何值为DBNull的单元格设置为字符串值“NULL”,2)将相同的单元格设置为斜体,并且3)突出显示某些行。
我正在做的简单例子:
private void btnFetch_Click(object sender, EventArgs e)
{
// If there's already a DataSource, Dispose of it.
if (bsMessageTracking.DataSource != null)
{
(bsMessageTracking.DataSource as DataTable).Dispose();
}
// Get new DataSource.
bsMessageTracking.DataSource = GetDataTable(); // Details not relevant.
// Show NULL values.
foreach (DataGridViewRow row in dgv.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
if (cell.Value is DBNull)
{
cell.Value = "NULL";
cell.Style.Font = new Font(dgv.DefaultCellStyle.Font, FontStyle.Italic);
}
}
}
// Apply highlighting.
foreach (DataGridViewRow row in dgvMessageTracking.Rows)
{
if (HighlightRow(row)) // Details not relevant.
{
row.DefaultCellStyle.BackColor = Color.LightYellow;
}
}
}
根据表单上TextBox的输入加载数据。
场合
如果按钮点击发生这种情况,一切都会很好用。但是,为了给用户提供一些便利,我允许这个表单加载预先填充的数据 - 主表单将实例化此表单,并将数据放入TextBox,并且将从构造函数调用此btnFetch_Click处理程序:
internal MessageTracking(string ID)
{
InitializeComponent();
// Setup data source.
dgvMessageTracking.DataSource = bsMessageTracking;
// Set ID and run query.
if (ID != null)
{
// Set ID.
txtlID.Text = ID;
// Run!
btnFetch_Click(null, null);
}
}
单元格的值被更改(所以我看到NULL),但字体和突出显示不会粘住。
我尝试了什么
如果我在OnShown方法中复制突出显示代码,突出显示会突出显示。但是,复制字体代码不起作用。如果我把它放在CellFormatting中,我可以制作字体,但这对我来说似乎有些过分,因为我只需要在加载表单时运行一次 - 如果进程运行之后它可以正常工作表格可见。
恳求
如果有人有任何建议,我将不胜感激。谢谢!
答案 0 :(得分:1)
对于您正在使用的事件处理程序,我建议使用像@zimdanen这样的dataGridView Cell_Formatting。但是,这就是我的工作方式。
private void small8PtToolStripMenuItem_Click(object sender, EventArgs e)
{
fontSize = 8;
dataGridBatchHistory.Refresh();
}
fontSize是一个用于动态设置字体的整数,您可以通过这种方式设置大多数属性。比我称之为我的CellFormatting功能
private void dataGridBatchHistory_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
e.CellStyle.Font = new Font("Tahoma", fontSize);
}
这将在单击我的工具条菜单项时使用新的正确大小更新我的表单。但我相信这适用于您可以创建的许多活动!
答案 1 :(得分:0)
我想,由于缺乏回复,如果您希望在表单首次显示时显示格式,则没有更好的方法。我删除了Show NULL values
处理程序的btnFetch_Click
部分并添加了此dgvMessageTracking_CellFormatting
处理程序以始终处理此功能:
private void dgvMessageTracking_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.Value is DBNull)
{
e.Value = "NULL";
e.CellStyle.Font = new Font(dgvMessageTracking.DefaultCellStyle.Font, FontStyle.Italic);
}
}