DataGridView
を使用して物事を表示したいだけで、ユーザーがDataGridView
から行、フィールド、または何かを選択できないようにします。
これどうやってするの?
私はこれで行きます:
private void myDataGridView_SelectionChanged(Object sender, EventArgs e)
{
dgvSomeDataGridView.ClearSelection();
}
私はDataGridView
を選択不可にするべきではないという広範な主張には同意しません。一部のUIはツールまたはタッチスクリーン用に構築されており、選択を許可すると、ユーザーは選択すると実際にどこかに移動すると考えるようになります。
コントロールでReadOnly = true
を設定しても、セルまたは行を選択できるかどうかには影響しません。また、Enabled = false
の設定には視覚的および機能的な欠点があります。
別のオプションは、選択されたコントロールの色を、選択されていない色とまったく同じに設定することですが、たまたまセルの背景色を操作している場合、このメソッドは厄介な結果をもたらします。
次のように、選択したセルに透明な背景色を設定できます。
DataGridView.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.Transparent;
Enabled
プロパティからfalse
へ
または
this.dataGridView1.DefaultCellStyle.SelectionBackColor = this.dataGridView1.DefaultCellStyle.BackColor;
this.dataGridView1.DefaultCellStyle.SelectionForeColor = this.dataGridView1.DefaultCellStyle.ForeColor;
Enabled
プロパティをfalse
に設定することでこれを修正しました。
すべてのAllowUser...
プロパティをfalse
に、ReadOnly
をtrue
に、RowHeadersVisible
をfalse
に、ScollBars
をNone
に設定してから、 選択の防止を偽装 が最適でした。 Enabled
をfalse
に設定しない場合でも、ユーザーはグリッドからデータをコピーできます。
次のコードは、単純な表示グリッドが必要な場合に外観をクリーンアップします(行の高さが同じであると仮定します)。
int width = 0;
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
width += dataGridView1.Columns[i].Width;
}
dataGridView1.Width = width;
dataGridView1.Height = dataGridView1.Rows[0].Height*(dataGridView1.Rows.Count+1);
これは私にとって魅力的でした:
row.DataGridView.Enabled = false;
row.DefaultCellStyle.BackColor = Color.LightGray;
row.DefaultCellStyle.ForeColor = Color.DarkGray;
(ここで行= DataGridView.NewRow(適切なオーバーロード);)
理論的にはuser4101525の答えが一番好きでしたが、実際にはうまくいきません。選択はオーバーレイではないため、制御下にあるものはすべて表示されます
Ramgy Borjaの答えは、デフォルトのスタイルが実際には色ではないという事実を扱っていないため、適用しても意味がありません。これはデフォルトのスタイルを処理し、独自の色を適用する場合に機能します(edhubbellが厄介な結果と呼ぶ場合があります)
dgv.RowsDefaultCellStyle.SelectionBackColor = dgv.RowsDefaultCellStyle.BackColor.IsEmpty ? System.Drawing.Color.White : dgv.RowsDefaultCellStyle.BackColor;
dgv.RowsDefaultCellStyle.SelectionForeColor = dgv.RowsDefaultCellStyle.ForeColor.IsEmpty ? System.Drawing.Color.Black : dgv.RowsDefaultCellStyle.ForeColor;
DataGridView.ReadOnly
プロパティ を使用します
MSDNの例 のコードは、主に表示用のDataGridView
コントロールでのこのプロパティの使用を示しています。この例では、コントロールの視覚的な外観はいくつかの方法でカスタマイズされており、コントロールは制限された対話性用に構成されています。
サンプルコードで次の設定を確認します。
// Set property values appropriate for read-only
// display and limited interactivity
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AllowUserToDeleteRows = false;
dataGridView1.AllowUserToOrderColumns = true;
dataGridView1.ReadOnly = true;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.MultiSelect = false;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
dataGridView1.AllowUserToResizeColumns = false;
dataGridView1.ColumnHeadersHeightSizeMode =
DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
dataGridView1.AllowUserToResizeRows = false;
dataGridView1.RowHeadersWidthSizeMode =
DataGridViewRowHeadersWidthSizeMode.DisableResizing;
カスタムDataGridViewを作成する必要があります
`
namespace System.Windows.Forms
{
class MyDataGridView : DataGridView
{
public bool PreventUserClick = false;
public MyDataGridView()
{
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (PreventUserClick) return;
base.OnMouseDown(e);
}
}
}
`新しいコントロールを使用する前に、クラスを追加してプログラムを一度コンパイルする必要があることに注意してください。
次に.Designer.csに移動し、以前のコードを台無しにすることなく、古いDataGridViewを新しいものに変更します。
private System.Windows.Forms.DataGridView dgv; // found close to the bottom
…
private void InitializeComponent() {
...
this.dgv = new System.Windows.Forms.DataGridView();
...
}
(それぞれ)
private System.Windows.Forms.MyDataGridView dgv;
this.dgv = new System.Windows.Forms.MyDataGridView();