我想在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中的数据网格中实现类似的逻辑。
答案 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;
}
}
}
);