このコードで「データソースのプロパティまたは列にバインドできません」というメッセージが表示されます(「 <-- here!」コメントが追加された行に):
List<QHQuad> listQH = PlatypusData.GetQHForPlatypusAndDay(platypusId, dow);
foreach (var quad in listQH)
{
int QHCell = quad.QH;
if ((QHCell >= 1) || (QHCell <= QUARTER_HOUR_COUNT))
{
string PH1CellToPopulate = string.Format("textBoxA_{0}", QHCell);
string PH2CellToPopulate = string.Format("textBoxB_{0}", QHCell);
string PH3CellToPopulate = string.Format("textBoxC_{0}", QHCell);
var tb = (TextBox)this.Controls.Find(PH1CellToPopulate, true).First();
tb.DataBindings.Add(new Binding("Text", quad, "Ph1")); // <-- here!
tb = (TextBox)this.Controls.Find(PH2CellToPopulate, true).First();
tb.DataBindings.Add(new Binding("Text", quad, "Ph2"));
tb = (TextBox)this.Controls.Find(PH3CellToPopulate, true).First();
tb.DataBindings.Add(new Binding("Text", quad, "Ph3"));
}
}
障害が発生した時点で、quad には次の 4 つの値が含まれます。QHCell は 1 です。空白文字列である Ph1。Ph2 は空白文字列です。Ph3は「1」
アップデート
quad.QH にアクセスできるので、可視性が問題になるとは思いません。また、クラスは public です。
私が得ているより完全な例外は、「System.ArgumentException was unhandled by user code Message=Cannot bind to the property or column Ph1 on the DataSource. Parameter name: dataMember」です。
問題の行を変更すると:
tb.DataBindings.Add(new Binding("Text", quad, "Ph1"));
...これに:
tb.DataBindings.Add(new Binding("Text", listQH, "quad.Ph1"));
「フィールドクワッドの子リストを作成できません」というメッセージが表示されます
更新 2
私がやっている方法では、データをバインドする意味がないからだと思います:
もともと、私は 384 人のメンバーを持つクラスを持っていました。
int
string
string
string
次に、4 つのメンバーを持つクラスの 96 個のインスタンスを使用するように変更しました (上の例では、「クワッド」、つまり QH、Ph1、Ph2、および Ph3)。
したがって、これらの一時的なクラス インスタンスにバインドしようとすることは、私の側ではあまり賢明ではありませんでした。そのクラスの 96 個のインスタンスを維持する必要がありました。
私はまだ間違っている可能性がありますが、これがここでデータバインドに失敗した理由だと思います.コードを洗練して忘却させました.