WPF datagrid einfügen

Ich habe Probleme beim einfügen aus csv in das wpf-datagrid - ich habe den Kommentaren hier

http://blogs.msdn.com/b/vinsibal/archive/2008/09/25/pasting-content-to-new-rows-on-the-wpf-datagrid.aspx

und den code exectues kein problem - jedoch, es scheint, dass alle die neuen Zeilen werden erstellt, aber nur die erste Zeile wird mit Daten gefüllt. Die Daten zu sein scheint, ständig überschrieben, so dass das Letzte Element in der Zwischenablage aufgefüllt wird in der ersten Zeile und alle weiteren Zeilen sind leer. Ich weiß, das muss ein index-Problem, oder etwas, aber ich kann nicht verfolgen Sie unten.

Auch, wenn ich einen Blick auf die Objekte, die in das raster gebunden Sammlung keiner von Ihnen irgendwelche Daten. Gibt es etwas in der OnPastingCellClipboardContent der Spalte an, die ist schief (Daten-Konvertierungs-vielleicht)?

Irgendwelche Ideen (siehe code unten)

protected virtual void OnExecutedPaste(object sender, ExecutedRoutedEventArgs args)
    {
        //parse the clipboard data
        List<string[]> rowData = ClipboardHelper.ParseClipboardData();
        bool hasAddedNewRow = false;

        //call OnPastingCellClipboardContent for each cell
        int minRowIndex = Math.Max(Items.IndexOf(CurrentItem), 0);
        int maxRowIndex = Items.Count - 1;
        int minColumnDisplayIndex = (SelectionUnit != DataGridSelectionUnit.FullRow) ? Columns.IndexOf(CurrentColumn) : 0;
        int maxColumnDisplayIndex = Columns.Count - 1;

        int rowDataIndex = 0;
        for (int i = minRowIndex; i <= maxRowIndex && rowDataIndex < rowData.Count; i++, rowDataIndex++)
        {
            if (CanUserAddRows && i == maxRowIndex)
            {
                //add a new row to be pasted to
                ICollectionView cv = CollectionViewSource.GetDefaultView(Items);
                IEditableCollectionView iecv = cv as IEditableCollectionView;
                if (iecv != null)
                {
                    hasAddedNewRow = true;
                    iecv.AddNew();
                    if (rowDataIndex + 1 < rowData.Count)
                    {
                        //still has more items to paste, update the maxRowIndex
                        maxRowIndex = Items.Count - 1;
                    }
                }
            }
            else if (i == maxRowIndex)
            {
                continue;
            }

            int columnDataIndex = 0;
            for (int j = minColumnDisplayIndex; j < maxColumnDisplayIndex && columnDataIndex < rowData[rowDataIndex].Length; j++, columnDataIndex++)
            {
                DataGridColumn column = ColumnFromDisplayIndex(j);
                column.OnPastingCellClipboardContent(Items[i], rowData[rowDataIndex][columnDataIndex]);
            }
        }

}

InformationsquelleAutor Jon | 2010-11-07
Schreibe einen Kommentar