1

我需要显示一个占位符,该占位符在Winforms中的第一行数据网格视图的前两列中包含一个字符串。当数据网格为空时,将显示占位符。在DataGridView单元格中显示占位符文本

enter image description here

+0

你真的是一个Label控件?或者你只是想设置两个单元格的文本值? – TaW

+0

其实我试图把标签作为占位符放在那些cells.so,如果datagridview是空的,我可以在那些单元上显示它。 – biff

+0

请根据您的新评论更改问题标题和说明。你想绘制前2列的占位符文本。此外,您似乎不需要单击按钮,只需在单元格为空时在单元格上显示它们。 –

回答

2

您需要处理CellPainting事件和借鉴的地方持有者自己:

void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.RowIndex < 0 || e.ColumnIndex < 0)  /*If a header cell*/ 
     return; 
    if (!(e.ColumnIndex == 0 || e.ColumnIndex == 1) /*If not our desired columns*/ 
     return; 

    if(e.Value == null || e.Value == DBNull.Value) /*If value is null*/ 
    { 
     e.Paint(e.CellBounds, DataGridViewPaintParts.All 
      & ~(DataGridViewPaintParts.ContentForeground)); 

     TextRenderer.DrawText(e.Graphics, "Enter a value", e.CellStyle.Font, 
      e.CellBounds, SystemColors.GrayText, TextFormatFlags.Left); 

     e.Handled = true; 
    } 
} 
+0

这是正确的。 –

+0

非常感谢您的帮助。 – biff

0

所以,你可以提高这个(为Textbox工作),并更改dataGrid.Text

Textbox myTxtbx = new Textbox(); 
myTxtbx.Text = "Enter text here..."; 

myTxtbx.GotFocus += GotFocus.EventHandle(RemoveText); 
myTxtbx.LostFocus += LostFocus.EventHandle(AddText); 

public void RemoveText(object sender, EventArgs e) 
{ 
    if (myTxtbx.Text == "Enter text here...") { 
     myTxtbx.Text = ""; 
    } 
} 

public void AddText(object sender, EventArgs e) 
{ 
    if(String.IsNullOrWhiteSpace(myTxtbx.Text)) 
     myTxtbx.Text = "Enter text here..."; 
} 

注:myTxtbx.Text = "Enter text here...";if (myTxtbx.Text == "Enter text here...")字符串“在这里输入文字... “必须相等。

+0

** 1)**在进入编辑模式之前没有'TextBox'。 ** 2)**您不应该将文本分配给'TextBox'。你应该画的地方持有人 –

+0

我的答案不是最好的,但我写了一个用法的想法。 –

相关问题