19

チェックボックス列とテキスト列を使用して単純なものを作成してDataGridViewいます(さらに多くの列が続きますが、これは私が機能させようとしている最小限の動作例です)。このコードを実行すると、チェックボックスの列が表示されますが、チェックボックスをオンにできません。

DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
checkColumn.ThreeState = false;
checkColumn.Width = 20;

MyDataGridView.Columns.Add(checkColumn);
MyDataGridView.Columns.Add(new DataGridViewTextBoxColumn());

この場合は何も表示されないので、ダミーデータを追加しようと思いました。

for (int i = 0; i < 10; i++)
{
    MyDataGridView.Rows.Add(new Object[] { true, "test"});
}

通常、この質問のDataGridViewように、カスタムオブジェクトのリストからバインドされたデータが入力されますが、先に進む前に、これを基本的な方法で機能させる方がよいと思いました。

チェック状態をプログラムで設定しようとしているのではなく、ユーザーが選択して、他のさまざまなイベントハンドラーでその選択を使用できるようにします。

4

6 に答える 6

38

DataGridViewコードは問題ないように思われるので、次のプロパティが正しく設定されていることを確認するように指示できます:ReadOnlyに設定しFalse、にEnabled設定しTrueます。

于 2012-06-30T09:38:36.503 に答える
8

私は同じ問題を抱えていました、私にとっての解決策は変更することでした

「EditProgramatically」からデフォルトの「EditOnKeystrokeOrF2」への「EditMode」、

これで私の問題は解決しました。

上記の提案はすべてすでに実装されています。

よろしくハイダー

于 2016-07-08T08:18:48.903 に答える
6

DataGridViewの読み取り専用プロパティを変更するだけです

     MyDataGridView.ReadOnly = false; 
于 2013-09-29T23:27:31.810 に答える
3

チェックボックスの列がテーブル設定でなくても、テーブル自体が読み取り専用に設定されている場合があります。これにより、列の設定が上書きされます。

于 2015-09-03T19:25:45.127 に答える
1

これは、 (DataGridView内の)terDataGridViewを持つオブジェクトをに入力した場合にも発生する可能性があります。この(読み取り専用)プロパティを表すの列は、プロパティを外部(=オブジェクトのコードの外側)に設定することが許可されていないため、自動的に読み取り専用になります。public Boolean propertyCheckBoxprivate setDataGridView

public class ExampleObject
{
    /// <summary>
    /// A public property that can only be read.
    /// When a DataGridViewRow is populated with this object, the column representing this Boolean property is automatically read-only.
    /// </summary>
    public Boolean QCPassed
    {
        get;
        private set;
    }
}
于 2013-07-23T06:02:52.247 に答える
1

また、さまざまな状況で同じ問題が発生しました。DataGridViewは、SqlDataReader(読み取り専用)で埋められたDataTableにバインドされていました。SqlDataReaderをSqlDataAdapterに置き換えました。正常に動作します。

DataTable dt=new DataTable();
SqlDataAdapter da=new SqlDataAdapter("Select <column_names> from <table_name>",con);
da.Fill(dt);
于 2013-10-15T10:17:21.953 に答える