wpf datagrid行拖拽 mysql
时间: 2023-07-07 13:41:52 浏览: 113
要实现 WPF DataGrid 行拖拽并且将数据保存到 MySQL 数据库,需要使用 DataGrid 的拖拽事件和 MySQL 的数据库连接。
首先,在 DataGrid 中启用行拖拽功能,可以使用 DataGridRow 的 PreviewMouseMove 和 PreviewMouseLeftButtonDown 事件。在 PreviewMouseMove 事件中,检测鼠标左键是否按下,并且鼠标移动的距离大于阈值时,启用拖拽功能。在 PreviewMouseLeftButtonDown 事件中,标记当前行为拖拽源。
接着,在 DataGrid 中处理拖拽事件。使用 DataGrid 的 PreviewDrop 事件,在拖拽结束时获取拖拽源和拖拽目标行的数据,将其从原位置移除并插入到目标位置。
最后,在移动行的同时更新 MySQL 数据库。可以使用 MySQL Connector/NET 连接数据库,并在拖拽事件中执行相应的 SQL 语句来更新数据库。
这里是一个示例代码,实现了 WPF DataGrid 行拖拽并保存到 MySQL 数据库:
```csharp
private void DataGridRow_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed &&
(Math.Abs(e.GetPosition(null).X - _dragStartPoint.X) > SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(e.GetPosition(null).Y - _dragStartPoint.Y) > SystemParameters.MinimumVerticalDragDistance))
{
// Enable drag
DataGridRow row = sender as DataGridRow;
DataGrid dataGrid = FindAncestor<DataGrid>(row);
if (row != null && dataGrid != null)
{
// Set drag source
_dragSource = row;
// Start drag drop
DragDrop.DoDragDrop(row, row.Item, DragDropEffects.Move);
}
}
}
private void DataGridRow_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// Save start point
_dragStartPoint = e.GetPosition(null);
}
private void DataGrid_PreviewDrop(object sender, DragEventArgs e)
{
if (_dragSource != null)
{
// Get source and target rows
DataGridRow sourceRow = _dragSource;
DataGridRow targetRow = FindAncestor<DataGridRow>((DependencyObject)e.OriginalSource);
if (targetRow != null)
{
// Get data items
object sourceItem = sourceRow.Item;
object targetItem = targetRow.Item;
// Get data grid
DataGrid dataGrid = FindAncestor<DataGrid>(sourceRow);
if (dataGrid != null)
{
// Get data source
IList itemsSource = dataGrid.ItemsSource as IList;
if (itemsSource != null)
{
// Move item
int sourceIndex = itemsSource.IndexOf(sourceItem);
int targetIndex = itemsSource.IndexOf(targetItem);
itemsSource.RemoveAt(sourceIndex);
itemsSource.Insert(targetIndex, sourceItem);
// Update MySQL database
MySqlConnection connection = new MySqlConnection("server=localhost;user=root;database=mydatabase;port=3306;password=mypassword;");
MySqlCommand command = connection.CreateCommand();
command.CommandText = "UPDATE mytable SET position = @position WHERE id = @id";
command.Parameters.AddWithValue("@position", targetIndex);
command.Parameters.AddWithValue("@id", ((MyDataItem)sourceItem).Id);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
}
// Reset drag source
_dragSource = null;
}
}
private T FindAncestor<T>(DependencyObject current) where T : DependencyObject
{
do
{
if (current is T)
{
return (T)current;
}
current = VisualTreeHelper.GetParent(current);
}
while (current != null);
return null;
}
```
注意,这只是一个示例代码,需要根据实际情况进行修改。同时,建议使用异步方式连接 MySQL 数据库,避免界面卡顿。
阅读全文