以编程方式在嵌套数据网格中设置数据

时间:2018-01-30 14:55:16

标签: c# wpf datagrid

SubVwr.Tables [0] .tbl是一个包含多个项目的表格,其中一些项目需要特定的Trace。那些需要跟踪的项目具有与之相关的序列号。为了解决这个问题,我为每个人创建了一个新窗口,我希望用户输入序列号。应该从上一个表(Subvwr)中提取新表(对话框)中的一些数据。如果我想在每行对话框中完成特定值的赋值,那么这里的语法是什么?

    private void requestSerials()
    {
        // needs to check for a difference. If QtyRcvd has changed, then we need to request "QtyRcvd" number of serials

        //for each row in our received order..
        foreach (DataRow row in SubVwr.Tables[0].Tbl.Rows)
        {
            // check to see if it neesd to be traced..
            if (row["TraceReq"].ToString() == "Y")
            {
                //if yes, create a serialInputDialogWindow
                SerialInputDialogWindow dialog = new SerialInputDialogWindow()
                {
                    Topmost = true
                };

                //Iterate through the dialogWindow before we display it to fill it with some necessary data.
                var itemsSource = dialog.serialtable.ItemsSource as IEnumerable;
                if (itemsSource != null)
                {
                    foreach (var item in itemsSource)
                    {
                        var serialrow = item as System.Data.DataRowView;

                            serialrow["PN"] = "test";     //doesn't work
                            serialrow.Row["PN"] = "test"; //doesn't work

                    }
                }
                dialog.ShowDialog();


            }
        }
    }

类似代码的一个例子。它按指定填充每行的特定列。我想从Subvwr获取数据并以类似的方式填充Dialog

    foreach(DataRow row in SubVwr.Tables[0].Tbl.Rows)
    {
        row["DateRcvd"] = DateTime.Today;
        row["QtyRcvd"] = row["QtyPer"];
    }

1 个答案:

答案 0 :(得分:0)

ItemsSource中的项目属于某种类型。如果例如dialog.serialtable.ItemsSource返回DataView,您可以将项目转换为DataRowViews,然后使用索引器访问任何列:

foreach (var item in itemsSource)
{
    var serialrow = item as System.Data.DataRowView;
    if (serialrow != null)
    {
        var name = serialrow["ColumnName"].ToString();
    }
}

如果是IEnumerable<T>TYourClass,则将其转换为此类型:

foreach (var item in itemsSource)
{
    var serialrow = item as YourType;
    if (serialrow != null)
    {
        var name = serialRow.Property1;
    }
}