11

DataGridView以前の質問 (リンク) の件名がありました。ただし、ボタンがnull. これで問題ありません。しかし、それがnullの場合、ボタンDataGridViewButtonColumnのボタンをオプションで削除/追加(表示/非表示?)できる方法はありますか?

このような:

+------------+------------+
| MyText     | MyButton   |
+------------+------------+
| "do this"  | (Yes)      |
| "do that"  | (Yes)      |
| FYI 'blah' |            | <---- this is where I optionally want no button
| "do other" | (Yes)      |
+------------+------------+

これは私がこれまでに試したことです(この例に基づいて

private void grdVerdict_CellFormat(object sender, DataGridViewCellFormattingEventArgs e)
{
   if (e.ColumnIndex == grdChoice.Columns["yesbutton"].Index)
   {
       if (grdVerdict[e.ColumnIndex, e.RowIndex].Value == null)
       {
            //grdVerdict[e.ColumnIndex, e.RowIndex].Visible = false; //<-says 'it is read only'
            //grdVerdict[e.ColumnIndex, e.RowIndex].Value = new DataGridTextBox(); //<- draws 'mad red cross' over whole grid
            //((Button)grdVerdict[e.ColumnIndex, e.RowIndex]).Hide; //<- won't work
       }
       else
       {
          e.Value = ((Button)grdChoice[e.ColumnIndex, e.RowIndex].Value).Text;
       }
   }
}
4

9 に答える 9

3

Tobias の回答に基づいて、パディングを調整してセルの内容を非表示にする小さな静的ヘルパー メソッドを作成しました。

ただし、ユーザーがセルを選択してスペースを押すと非表示のボタンがクリックされるという点で、ボタンは引き続き「クリック可能」であることに注意してください。したがって、 contentclick イベントでクリックを処理する前に、セルの値が読み取り専用でないことを確認します

  public static void DataGridViewCellVisibility(DataGridViewCell cell, bool visible)
  {
        cell.Style = visible ?
              new DataGridViewCellStyle { Padding = new Padding(0, 0, 0, 0) } :
              new DataGridViewCellStyle { Padding = new Padding(cell.OwningColumn.Width, 0, 0, 0) };

        cell.ReadOnly = !visible;
  }
于 2015-11-30T02:58:40.590 に答える
1

カスタム ペイントを処理し、そこにテキスト ボックスをペイントします。

void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.ColumnIndex == yourColumnIndex && String.IsNullOrEmpty((string)e.FormattedValue))
    {
        Graphics g = e.Graphics;
        TextBoxRenderer.DrawTextBox(g, e.CellBounds,
            System.Windows.Forms.VisualStyles.TextBoxState.Normal);
        e.Handled = true;
    }
}
于 2014-08-08T11:25:48.203 に答える
1

DataGridViewButtonこの投稿で提案されているように、少しの努力で無効にすることができます: datagridview のボタン列を無効にする

DataGridViewImageColumn画像ボタンを有効または無効にできるため、 andDataGridView.CellFormattingイベントを使用してさまざまな画像を表示することを好みました。

この場合、ボタンを無効にする必要がある場合は、空白の画像を表示して、DataGridView.CellClickイベントで何もしないことができます。

于 2014-08-08T10:02:34.717 に答える
0

すべての側面をセルの高さと幅 (どちらか大きい方) にパディングするだけです。

于 2018-10-18T14:12:55.860 に答える