B. *_*non 1 c# data-binding dynamic winforms
我正在使用此代码获取" 无法绑定到数据源上的属性或列 "(在附加了" < - 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"));
}
}
Run Code Online (Sandbox Code Playgroud)
在失败点,quad包含四个值:QHCell,即1; Ph1,这是一个空白字符串; Ph2,这是一个空白字符串; 和Ph3,这是"1"
我不认为可见性是一个问题,因为我能够访问quad.QH; 此外,该课程是公开的.
我得到的更完整的异常是" System.ArgumentException未被用户代码处理Message =无法绑定到DataSource上的属性或列Ph1.参数名称:dataMember "
如果我更改问题行:
tb.DataBindings.Add(new Binding("Text", quad, "Ph1"));
Run Code Online (Sandbox Code Playgroud)
......对此:
tb.DataBindings.Add(new Binding("Text", listQH, "quad.Ph1"));
Run Code Online (Sandbox Code Playgroud)
我明白了," 无法创建字段四边形的子列表 "
我认为这是因为我这样做的方式,绑定数据是没有意义的:
最初我有一个有384名成员的班级,这类96"四边形":
int
string
string
string
Run Code Online (Sandbox Code Playgroud)
然后我将其更改为使用96个具有4个成员的类的实例(上面的那些 - "四元组",即QH,Ph1,Ph2和Ph3).
因此,尝试绑定到这些瞬态类实例对我来说并不是真的合理 - 我将不得不保留该类的96个实例.
我仍然可能是错的,但我认为这就是数据绑定失败的原因:我将我的代码置于遗忘之中.
根据您对sharp_net的评论,数据绑定适用于Properties,而不是Fields.
从这个改变你的班级:
public class QHQuad {
public int QH;
public string Ph1;
public string Ph2;
public string Ph3;
}
Run Code Online (Sandbox Code Playgroud)
对此:
public class QHQuad {
public int QH {get; set;}
public string Ph1 {get; set;}
public string Ph2 {get; set;}
public string Ph3 {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
您还应该考虑实现INotifyPropertyChanged接口.
归档时间: |
|
查看次数: |
4782 次 |
最近记录: |