2016-01-21 83 views
0

我想將文本框綁定到包含一行的數據表。但我希望文本框綁定到4列的連接。綁定多個數據表列到一個多行文本框

我不確定在綁定過程中是否可以不做。

這下面一個工作正常,但我想也「SHIP_ADDRESS1」連接到我的多行文本框。

shipToTextbox.DataBindings.Add("Text",dataTbl, "SHIP_TO"); 

有沒有辦法在綁定過程中做到這一點?

編輯:

我添加了一個擴展方法的數據表如下:

public static DataTable Concatenates(this DataTable datatable, string columnName, params string[] columns) 
    { 
     var column = new DataColumn(columnName, typeof(String)); 
     datatable.Columns.Add(column); 

     var concatenation = string.Empty; 

     foreach (var c in columns) 
     { 
      if (string.IsNullOrEmpty(concatenation)) 
      { 
       concatenation = datatable.Rows[0][c].ToString().Trim(); 
      } 
      else 
      { 
       concatenation = concatenation + Environment.NewLine + datatable.Rows[0][c].ToString().Trim(); 
      } 
     } 

     datatable.Rows[0][column] = concatenation; 

     return datatable; 
    } 

,我稱之爲如下:

shipToTextbox.DataBindings.Add("Text", dt.Concatenates("SHIP", "SHIP_TO", "SHIP_ADDRESS1", "SHIP_ADDRESS2", "SHIP_ADDRESS3"), "SHIP"); 

它是一個可以接受的解決方案?有沒有辦法使用LINQ以更好的方式編寫Concatenate擴展方法?

+0

如果可能,創建一個自定義公共屬性,該屬性將返回串聯的字符串。然後綁定該屬性。 – mshsayem

+0

您不能添加一個計算列到包含此表達式的表中:'col.Expression =「SHIP_TO - SHIP_ADDRESS1 - SHIP_ADDRESS2 ...」 '? –

+0

數據來自多個應用程序使用的視圖,我不想更改它。在這種情況下,我假設我將不得不在DataTable級別執行 – ehh

回答

-1

如果您正在討論xaml框架,您可以使用MultiValueConverters和ValueConverters。

但是,winforms綁定會生成兩個重要且有用的事件:格式和分析。

將數據從源數據拉入控件時觸發format事件,並且在將數據從控件拉回到數據源時觸發Parse事件。如果你處理這些事件,你可以在綁定過程中改變/重新鍵入這些值。

+0

我無法在文本框事件列表中看到任何格式的事件。你可以請更具體嗎? – ehh

+0

@asad mehmood - 你剛從這裏做了一個複製和粘貼的答案:[stackoverflow.com/questions/2044067/how-to-convert-enum-to-a-bool-for-databinding-in-winforms ](http://stackoverflow.com/questions/2044067/how-to-convert-enum-to-a-bool-for-databinding-in-winforms) – markpsmith

相關問題