繁体   English   中英

如何对DataGridColumn执行Drop操作?

[英]How to perform Drop operation into DataGridColumn?

我有一个项目,必须将数据从excel导入到SQL数据库,Excel信息未格式化,必须经过验证并与SQL列的表配对到我的应用程序中。

我有一个表示SQL列的ListView ,和一个表示Excel信息的Datagrid(AutoGenerateColumns = true)

现在用户必须将ListView项与DataGrid列配对,我试图使用DragDrop做到这一点,但ListView已完成,但是Datagrid是动态生成的,因此无法对每个列进行编程以进行Set DragDrop操作。

如何在那些自动生成的DataGridColumns上设置DragDrop操作?

有什么建议么 ?

我一直在寻找DataGrid属性,可以在其中强制DataGrid使用我自己的ImporDataGridColumn:DataGridColumn但找不到在哪里做。

更新:最后可以添加我自己的列,但现在无法在列上找到AllowDrop ...。 真是一场噩梦。

当DataGrid的AutoGenerateColumns = False时,可以使用其Columns属性在运行时添加列。

最后,找不到直接执行我在列上的放置的直接方法...然后,我将AllowDrop = true设置为我的数据网格。

当对我的数据网格执行删除操作时,我使用列宽搜索列。 这是代码(tks到@ mm8 ),它们可以帮助我解决水平滚动偏移

    private static T GetChildOfType<T>(DependencyObject depObj) where T : DependencyObject
    {
        if (depObj == null)
            return null;

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            var child = VisualTreeHelper.GetChild(depObj, i);

            var result = (child as T) ?? GetChildOfType<T>(child);
            if (result != null)
                return result;
        }
        return null;
    }


    private void DGrdDatosImportar_Drop(object sender, DragEventArgs e)
    {

        ScrollViewer sv = GetChildOfType<ScrollViewer>(DGrdDatosImportar);
        if (sv != null)
        {
            double horizontalOffset = sv.HorizontalOffset;
            var dropPos = e.GetPosition(DGrdDatosImportar);
            double relativeXPos = dropPos.X + horizontalOffset;
            double RefPos = DGrdDatosImportar.RowHeaderActualWidth;
            DataGridColumn SelecteCol = null;
            foreach (DataGridColumn Col in DGrdDatosImportar.Columns.ToList())
            {
                double ColWidth = Col.ActualWidth;
                if (relativeXPos >= RefPos && relativeXPos <= (RefPos + ColWidth))
                {
                    SelecteCol = Col;
                    break;
                }
                RefPos += ColWidth;
            }
            if (SelecteCol != null)
            {
                if (e.Data.GetDataPresent("IImportProperty"))
                {
                   ...
                }
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM