在数据网格中添加组合框

时间:2013-04-21 16:02:18

标签: datagrid

我想在wpf的数据网格中动态添加第7列特定单元格中的组合框或级别。现在我有一个i元素数组。我正在使用for循环,它迭代我的时间,每次检查数组的第i个数是否大于1。如果它大于1,则找出满足数组值的相应行,并在数据网格的每一行的第7列添加组合框。

如果数组值等于1,则添加标签。

我在ASP.NEt中执行的类似应用程序如下

    if (count[i] > 1)
     {
       DropDownList drp = new DropDownList();
       drp.DataSource = dsq.Tables[0];
       drp.DataTextField = "Application Name";
       drp.DataValueField = "Application Name";
       drp.DataBind();
     if (row.Cells[0].Text.ToString().Trim().Equals(dt.Rows[i][0].ToString().Trim()))
       {
         row.Cells[7].Controls.Add(drp);
       }

    }
     else
     {
      Label l = new Label();
      l.Text = dsq.Tables[0].Rows[0][0].ToString().Trim();

     row.Cells[7].Controls.Add(l);
      }

请告诉我如何在WPF中的数据网格中实现类似的逻辑。

1 个答案:

答案 0 :(得分:0)

是的,经过大量研究后我找到了答案。请看下面:

 for (int j = 0; j < dt2.Rows.Count; j++)
   {
   DataGridRow row =  
   DataGridRow)dgApplications.ItemContainerGenerator.ContainerFromIndex(j);
   DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);
   DataGridCell cell0 = 
   (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(0);

   ComboBox cb = new ComboBox();
 foreach (DataRow row2 in dsq.Tables[0].Rows)
    {
      ComboBoxItem cbx = new ComboBoxItem();
      cbx.Content = row2["Application Name"];
     cb.Items.Add(cbx);
    }                            
  cell7.Content = cb;

// GetVisualFunction

   public static T GetVisualChild<T>(Visual parent) where T : Visual
{
    T child = default(T);

    Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate()
    {
        int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
        for (int i = 0; i < numVisuals; i++)
        {
            Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
            child = v as T;
            if (child == null)
            {
                child = GetVisualChild<T>(v);
            }
            if (child != null)
            {
                break;
            }
        }

    }
   );