2014-06-18 33 views
0

我有一個Node類,它用於存儲樹。文本存儲節點值,子節點存儲子樹。我coverting樹一個DataTable,由第一平整樹並將其保存在數據表中類之間的綁定

public class Node 
{ 
    public string Text { get; set; } 
    public List<Node> Children { get; set; } 
} 

對於實例

 1 
    /\ 
    2 5 
/\ \ 
3 4 6 

被夷爲平地,

1-2-3 
1-2-4 
1-5-6 

現在我結合這DataTable到DataGrid。當用戶更改DataGrid中的值時,它將在DataTable中進行更改,但有什麼方法可以在我的樹中進行更改。我在問是否可以在Node和Datatable這兩個類之間進行綁定。

+0

你爲什麼用一個單名「Child」命名一個集合屬性?如果它被命名爲「孩子」,它肯定會更有意義。 – Sheridan

回答

3

我coverting樹一個DataTable,由第一平整樹並將其保存在數據表中

你爲什麼會自願讓您的工作更加複雜,沒有好處?不要轉換(或「拼合」)您的數據,請勿使用DataTable來保存它,也不要在DataGrid中顯示它。如果我扁平分層數據,你問的是,對分層數據所做的更改是否以分層方式表示?答案是是的......但有很多工作

更好的選擇是將分層數據保留在其分層格式中,然後以TreeView或其他某種分層方式顯示它。以自然形式綁定數據的數據將使得可以按預期將更改傳播回數據元素。

+0

謝謝,但我的要求只是這樣。我必須顯示所有父節點文本的葉節點。將創建一個自定義控件將解決我的問題?我正在尋找一種方法來直接綁定與DataGrid的Node類。 –

0

您的數據庫結構有點冗長。海事組織你應該定義對象作爲父鍵/值對,所以你可以編輯單個值,而無需重新讀取整個樹。它還可以通過調用單個選擇查詢來輕鬆獲取子項目列表。如果樹中的值不同,可能會將值作爲主鍵進行威脅。如果他們可以在樹上重複,那麼您需要額外的第三個字段來存儲唯一的ID密鑰。

我不確定你使用什麼樣的DataGrid訪問,但f.e.用LinqToSql你可以創建一個數據模型上下文,包含實體定義。然後,您可以編輯它(或從中派生),並將List<Node> Children作爲非自定義getter的非db字段添加,並返回一些懶惰的子項集合。