【问题标题】:c# Binding on specific row in tablec# 绑定表中的特定行
【发布时间】:2009-08-20 17:07:59
【问题描述】:

使用 c# .net 2.0 ,我想将文本框绑定到表格的特定行。在示例中:

 Table Person
 ID NAME PRENOM SPECIAL_CATEGORY
  1 BOB  BOB    mex
  2 AL   AL     tot
  3 PO   PO     pap

我想在包含 special_categeory = 'tot' 的行的字段名称上绑定我的文本框。 是否可以?或者我需要为此行创建一个 Datarow 并绑定它。

【问题讨论】:

    标签: c# .net data-binding


    【解决方案1】:

    假设您正在谈论 Winforms,并且您已经将数据源作为表单上的一个组件,这相当简单。

    将新的BindingSource 拖到您的表单上,并将其数据源设置为您现有的数据源。然后,您可以在设计器中的新BindingSourceFilter 属性中指定过滤表达式。将您的TextBox 绑定到您的新BindingSource,一切就绪。

    手动操作(没有设计器)只是稍微复杂一些。

    BindingSource newSource = new BindingSource();
    
    newSource.DataSource = yourExistingDataSource;
    newSource.Filter = "special_categeory = 'tot'";
    
    textBox.DataBindings.Add("Text", newSource, "DataMember");
    

    【讨论】:

      【解决方案2】:

      你应该可以通过...绑定

      myNameTextBox.DataBindings.Add( "Text", MyTable, "NAME" );
      myPrenomTextBox.DataBindings.Add( "Text", MyTable, "PRENOM" );
      mySpecial_CategoryTextBox.DataBindings.Add( "Text", MyTable, "SPECIAL_CATEGORY" );
      

      我实际上有一个框架可以滚动浏览所有控件,如果它们与给定表中的列名匹配,它们会立即像上面一样绑定自己。

      然后,当您滚动网格时,它也应该刷新表单中的各个文本控件。

      【讨论】:

      • 为什么不直接使用内置的数据绑定设计器呢?这也不会根据需要过滤结果。
      【解决方案3】:

      如果有一些绑定需要做,你可以按照这个模式:

      DataView dv = new DataView(MyTable);
      dv.RowFilter = "SPECIAL_CATEGORY = 'tot'";
      GridView1.DataSource = dv;
      GridView1.DataBind();
      

      但我不认为你绑定到文本框?您可以像这样设置 Text 属性:

      foreach(DataRow dr in MyTable.Rows)
      {
          if (dr["SPECIAL_CATEGORY"] != DBNull.Value &&
                dr["SPECIAL_CATEGORY"].ToString() == "tot")
          {
             myTextBox.Text = dr["NAME"].ToString()
             break;
          }
      }
      

      【讨论】:

        【解决方案4】:

        我假设它是 Winforms,你可以这样做:

        myTable.DefaultView.RowFilter = "SPECIAL_CATEGORY = 'tot'";
        this.textBox1.DataBindings.Add("Text",myTable.DefaultView,"Name");
        

        【讨论】:

        • -1。此源用于网格(假设它是 DataTable 或 DataView),您现在正在过滤网格的内容以获取 TextBox。应该使用指向相同数据的新源,而不是修改现有源。
        • 你怎么知道源被用于网格? OP 从未指定表被绑定到其他任何东西......
        • 好点。尽管如此,您不应修改 DefaultView 上的属性。没有理由这样做。如果您想坚持使用经典的 ADO.NET 数据对象,请在该表上创建一个新的 DataView 并对其进行过滤。
        猜你喜欢
        • 1970-01-01
        • 2011-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-22
        • 1970-01-01
        • 2010-12-03
        • 1970-01-01
        相关资源
        最近更新 更多