我应该在Windows窗体项目中使用数据绑定吗?

时间:2011-03-06 09:16:43

标签: c# winforms data-binding

我正在使用Winforms开发一个应用程序,并使用BindingSource沿着数据绑定网格的路径走下去。我的问题是:

这是最好的方法吗?我应该手动填充单元格而不是让BindingSource为我做这些吗?它会导致进一步的问题吗?如果在任何情况下数据绑定会产生问题,那将非常有用。

我的一位同事发誓黑色和蓝色不使用数据绑定。我真的不相信他所说的,所以任何利弊都是有价值的。

在连接到单个数据库和可编辑DataGrid的多用户应用程序的情况下,如何解决更新数据的并发问题?

5 个答案:

答案 0 :(得分:15)

在没有说明原因的情况下,对任何事情宣誓黑色和蓝色,坦率地说,这是愚蠢的。

在某些情况下,数据绑定很棒,并且有些情况比实际情况更麻烦。如果仅从频谱的“痛苦”结束报告,你的同事对你没有任何帮助。

对于简单的数据显示,太棒了!它会为您节省大量时间和错误。对于数据的直接更新(包括属性逻辑和IDataErrorInfo支持),再次,伟大的!。事实上,它是WPF等的核心部分。

有些情况下它不那么有用:

  • 海量数据(“虚拟”模式有助于或更好:不显示1000万行;对任何人都没有帮助)
  • 如果您不希望更新是直接的,而是:延迟 - 虽然绑定到视图模型(而不是您的域模型)是一个很好的反驳论据
  • 当你有很多不同的线程试图绑定到相同的数据时(同样,独立的视图模型帮助)

我会问你的同事“为什么”;如果他们不能给出一个充分的理由,我会倾向于忽视它们。如果没有合理的讨论,那就是FUD。

答案 1 :(得分:6)

我个人发现使用更容易编程的数据绑定过程,您不必进行迭代,总体上减少了LOC。

来自Data binding concepts in .NET windows forms

  

DataBinding的优势

     
      
  1. .NET中的数据绑定可用于   写数据驱动的应用程序   很快。 .NET数据绑定允许   你用快速编写更少的代码   执行但仍然得到工作   以最好的方式完成。

  2.   
  3. .NET会在后台自动为您编写大量数据绑定代码(您可以在“Windows生成代码”部分中看到它),因此开发人员不必花时间编写基本数据绑定代码,但是仍然可以灵活地修改他想要的任何代码。我们获得了绑定和非绑定方法的好处。

  4.   
  5. 使用事件控制数据绑定过程。这将在本文后面更详细地讨论。

  6.         

    DataBinding的缺点

         
        
    1. 可以使用未绑定或传统方法编写更多优化代码。

    2.   
    3. 只有使用未绑定方法才能实现完全的灵活性。

    4.   

更进一步说明,您应该看到Data binding concepts in .NET windows forms

答案 2 :(得分:4)

我没有看到BindingSource组件没有问题。唯一的建议是不要使用Untyped数据集。将BindingList与类和您的所有集合一起使用。

BindingSource肯定比传统的数据绑定更好。

您可以阅读有关BindingSource Component Architecture的所有内容。

一个非常简单的例子:

使用数据绑定非常简单,可以将数据从数据库转换为有用的数据。例如,您在数据库中有一个十进制列,其中包含货币金额:

使用数据绑定,您可以轻松地将其显示为货币:

private void DecimalToCurrencyString(object sender, ConvertEventArgs cevent)
{
   // The method converts only to string type. Test this using the DesiredType.
   if(cevent.DesiredType != typeof(string)) return;

   // Use the ToString method to format the value as currency ("c").
   cevent.Value = ((decimal) cevent.Value).ToString("c");
}

private void CurrencyStringToDecimal(object sender, ConvertEventArgs cevent)
{
   // The method converts back to decimal type only. 
   if(cevent.DesiredType != typeof(decimal)) return;

   // Converts the string back to decimal using the static Parse method.
   cevent.Value = Decimal.Parse(cevent.Value.ToString(),
   NumberStyles.Currency, null);
}

private void BindControl()
{
   // Creates the binding first. The OrderAmount is a Decimal type.
   Binding b = new Binding
      ("Text", ds, "customers.custToOrders.OrderAmount");
   // Add the delegates to the event.
   b.Format += new ConvertEventHandler(DecimalToCurrencyString);
   b.Parse += new ConvertEventHandler(CurrencyStringToDecimal);
   text1.DataBindings.Add(b);
}

来源链接http://msdn.microsoft.com/en-us/library/system.windows.forms.binding.format.aspx

答案 3 :(得分:1)

我使用数据绑定,因为它可以工作,这就是它的用途。您可以随时使用OnDataBinding进行任何自定义(如果需要),同时为支持它们的任何控件调用Bind或DataBind方法。

答案 4 :(得分:1)

你有没有问过你的同事他没有使用数据绑定的原因是什么?如果他反对在特定案件中使用它,那么他可能会做某些事情,但如果他反对使用它,那么你就是不相信他。

数据绑定在某些情况下非常有用,可以为您节省很多麻烦和容易出错的代码。

e.g。假设您使用多个控件来显示数据:如果使用数据绑定,则在更改数据源后控件将自动更新,并且在大多数情况下您无需编写任何代码来更新控件。如果您不使用数据绑定,则必须手动更新每个控件,这将导致容易出错的代码和数据一致性问题,并且如果逻辑发生变化并且您始终希望避免复杂性,则会使代码维护变得复杂代码。

总而言之,就像大多数编程工具一样,它是您计划使用它的地方和方式,以证明其使用的合理性。