我有一个必须将数据从excel导入SQL数据库的项目,Excel信息未格式化,必须经过验证并与SQL列的表配对到我的应用程序中。
我有一个 ListView ,其中表示了SQL列,还有一个 Datagrid(AutoGenerateColumns = true),其中表示了excel信息。
现在用户必须将ListView项与DataGrid列配对,我正在尝试使用DragDrop,所有在ListView完成,但Datagrid是动态生成的,不能将每个列编程为Set DragDrop操作。
如何在这些自动生成的DataGridColumns上设置DragDrop操作?
有什么建议吗?
我正在寻找DataGrid属性,我可以强制DataGrid使用我自己的ImporDataGridColumn:DataGridColumn但是找不到在哪里做。
更新: 最后可以添加我自己的列,但现在无法在列上找到 AllowDrop ....这真是一场梦魇。
答案 0 :(得分:1)
当DataGrid的AutoGenerateColumns = False时,您可以使用其Columns属性在运行时添加列。
答案 1 :(得分:0)
最后无法找到直接的方法来执行我对列的删除...
然后我将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"))
{
...
}
}
}
}