我有一个表单,将由模板中的一堆信息填充,然后交给用户填写其余部分。问题是,模板和保存最终结果的对象是DataRows,因为它全部进出数据库(我没有模式控制),所以这似乎是绑定所有控件的好地方继续做更重要的事情吧?
我无法正确绑定控件,这部分是我的错,因为我想把它抛出一行,让它解决行中哪些列很重要,并保留这些值,所以我经常抛出没有控件所期望的所有列的行,因此它们抛出异常。但部分我 - 不知道 - 谁是错,因为这样做:
inProductName.DataBindings.Add("Text", TemplateBinder, "ProductName");
其中TemplateBinder是一个BindingSource对象,其DataSource属性设置为我想要逐出的DataRow,当我去显示表单时抛出异常。不确定我应该做些什么不同 - 在我获得模板行之前,TemplateBinder将不包含任何DataSource,如果我必须自己管理绑定而不是设置它们并在页面顶部忘记它们我不是从绑定中获得更多价值。
这只是一个测试,看看我想做的事情是否可行!我试图传递BindingSource一行,其中包含我想要传播到表单的值,挂起绑定,将其切换为表中的空行,以便我传播出来的值保留在我绑定的属性中,显示表单,让用户填写它,然后再次启用绑定,这样控件中的绑定属性会进入我设置为BindingSource DataSource的空白行。我的意思是,没有办法可以工作,因为那太容易了,但如果我能做到这一点,而不是我的旧方式,这涉及30个案例的转换声明,那肯定会很好。
我不想在这里的兔子洞里走太远。 Visual Studio中有一个诱人的按钮,它说它只会自动设置所有内容,但我有使用Visual Studio的经验,这表明它不会喜欢通过Visual Studio不会更改数据库架构的想法。另外,我不知道如何从这种花哨的自动化设置中获得灵活性(或者更确切地说,我的客户)的需求(我甚至无法看到如何以编程方式弄乱连接字符串)。我所拥有的复制粘贴代码可能不像杀死特征那样容易犯罪,因为我在幕后做了一个彻底的改变,恰好使某些非常方便的功能变得不方便。 Copypasta可以比重写整个应用程序更快地转换为函数。那么如果数据库发生了变化呢?自动化代码似乎更倾向于抛出异常,而不仅仅是吞下它的骄傲,如果它没有足够的信息来做任何事情就不做任何事情。
所以,Stack Overflow,tl; dr:我想让数据绑定为我工作而不是让我抛弃我所做的一切。我可以吗?
答案 0 :(得分:1)
我希望为了实现这一目标,您需要使用DataRowView
,而不是DataRow
;尝试从DataView
而不是DataTable
获取此信息。默认视图为table.DefaultView
。
有关信息;使用DataTable
作为绑定源的原因是DataTable
实现IListSource
,并返回(从GetList()
)默认视图 - 实际上,当您绑定到DataTable
, actaully 最终绑定到默认视图(DataView
)。