全体の文脈を説明することなく、私の問題は基本的にこれです:
EntityFrameworkDbSetにバインドされているWindowsフォームにdatagridviewがありますdbSet<TEntity>.Local.ToBindingList()
。
datagridviewのReadOnly
プロパティを(デザインビューで)trueに設定し、コードに次のステートメントを含めると、次のようになります。
myDataGridView.Rows[rowIndex].ReadOnly = false;
値を変更せずにステップスルーします!(いいえ、私のデータソースは読み取り専用ではありません。)
行のセルをループして、各セルのReadOnlyプロパティを個別に設定することも機能しません。
foreach (DataGridViewCell cell in myDataGridView.Rows[rowIndex].Cells)
{
cell.ReadOnly = false;
}
.ReadOnly-しかし、何らかの理由で設定できGets or sets a value indicating whether the user can edit the cells of the DataGridView control.
ないように動作しています。
これが起こる理由はありますか?datagridviewのReadOnly
プロパティが特定の行/セルに加えられた変更を上書きする可能性があると思っていました(つまり、フォーム全体が読み取り専用かどうか)、これは誰かのために機能したようです...
私の最終目標を達成する方法は他にもありますが、これが私の状況の最も簡単な解決策であるため、このプロパティを変更できない理由を知りたいと思います。
編集:
私の質問を明確にしようと思います:
繰り返しになりますが、私の最終目標を達成する方法は他にもあることを認識していますが、この問題に対する回答を求めています。
原始的な例で申し訳ありませんが、問題を簡単に再現するには、WinFormアプリケーションを作成し、それにdatagridviewをスローして、このコードをプロジェクトに貼り付けます。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.ReadOnly = true;
string[] row1 = new string[] { "test", "test1" };
string[] row2 = new string[] { "test2", "test3" };
string[] row3 = new string[] { "test4", "test5" };
dataGridView1.Columns.Add("1", "1");
dataGridView1.Columns.Add("2", "2");
dataGridView1.Rows.Add(row1);
dataGridView1.Rows.Add(row2);
dataGridView1.Rows.Add(row3);
dataGridView1.Rows[1].ReadOnly = false;
}
}
最後の行にブレークポイントを設定し、それをステップスルーすると、ReadOnlyプロパティが変更されないことがわかります。なぜ??