1

WinformsのDataGridビューの最初の行の最初の2つの列に文字列を含むプレースホルダを表示する必要があります。プレースホルダは、DataGridが空のときに表示されます。DataGridViewセルにプレースホルダテキストを表示

enter image description here

+0

あなたが本当にLabelコントロールを意味しますか?または、単に2つのセルのテキスト値を設定したいですか? – TaW

+0

実際に私はそれらのセルにplaceholderとしてラベルを配置しようとしています。そうすれば、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

私の答えは最高ではありませんが、私は使用のアイデアを書いた。 –

関連する問題