2009-11-27 83 views
1

我写了一些代码,它用来自数据库的一些数据填充控件。如果控件直接放在窗口中,一切正常。但如何来填补控件,这是其他控件内部,如的TabControls,GroupBoxes等 我的代码如下所示:WPF - 填充数据控件,即在另一个控件内部

一些窗口:

private void LoadDataP() 
{ 
    if (ID.Length > 0) 
    { 
     if (baseButtons.LoadProcedureSelectName != string.Empty) 
      LoadData = SqlHelper.GetTable(baseButtons.LoadProcedureSelectName, new string[] { IdName, ID }); 
     if (LoadData != null) 
      foreach (DataRow dr in LoadData.Rows) 
      { 
       SqlHelper.FillWindowControllsWithData(myGrid, dr); 
      } 
    } 

} 

有另一种方法class.They做主要工作:

public static void FillWindowControllsWithData(Grid windowGrid, DataRow dataRow) 
{ 
    foreach (Control ctrl in windowGrid.Children) 
    { 
     FillWindowControllsWithData(ctrl, dataRow); 
    } 
} 

public static void FillWindowControllsWithData(Control ctrl, DataRow dataRow) 
{ 
    if (ctrl.Name.IndexOf("db_") == 0) 
    { 
     if (ctrl is TextBox) 
     { 
      if (dataRow.Table.Columns.Contains(ctrl.Name.Substring(3))) 
      { 
       ((TextBox)ctrl).Text = dataRow[ctrl.Name.Substring(3)].ToString(); 
      } 
     } 
    } //end if 

} 

所以没有任何人知道如何填写texbox,这在一些组框或TabControl的数据,其中也有孩子..?

回答

1

我想你可以递归地编写FillWindowControllsWithData方法。您需要更改该方法的签名:

public void FillWindowControllsWithData(FrameworkElement element, DataRow dataRow) 
{ 
    if (element is TextBox) 
    { 
     if (element.Name.StartsWith("db_") 
     { 
      if (dataRow.Table.Columns.Contains(element.Name.Substring(3))) 
      { 
       ((TextBox)element).Text = dataRow[element.Name.Substring(3)].ToString(); 
      } 
     } 
    } 
    else if(element is Panel) 
    { 
     foreach(FrameworkElement el in ((Panel)element).Children) 
     { 
      FillWindowControllsWithData(el, dataRow); 
     } 
    } 
    else if(element is ContentControl) 
    { 
     FillWindowControllsWithData(((ContentControl)element).Content, dataRow); 
    } 
    //else do nothing 
} 

但是,这绝对不是这样做的方法。你需要通过数据绑定来填充你的控件。开始here开始。祝你好运!

2

只是为了扩大Dabbleml的观点:使用Windows Forms技术编写WPF应用程序是一条绝望和苦难之路。构建WPF应用程序的快乐,欢乐和自由的方式是通过MVVM模式和数据绑定。

流行语让这种声音比实际情况困难得多。实际上它的概念很简单:

  1. 设计你的WPF窗口。这是你的看法。

  2. 构建一个暴露窗口将显示为属性的每条数据的类。这是你的观点模型。向从数据源填充它的类添加一个方法。 (顺便说一句,这是你的模型,现在你可以说你正在使用MVVM模式,并在派对上给女孩留下深刻印象)。类,并将控件绑定到类的属性。

当你这样做时会发生什么:你编写的实际代码都涉及操纵数据,而不是UI。当有人来找你,并询问你的窗口是否可以在某种奇怪的情况发生时显示某种舞蹈博洛尼亚,你不写任何UI代码;您只需向视图模型中添加一个属性,然后将视图中的舞蹈 - 波洛尼亚控件绑定到它。

+0

这可能是最好的,最简洁的解释MVVM为我所遇到的外行...非常好说 – Hardryv 2014-08-05 21:57:20