gpt4 book ai didi

c# - WPF 数据网格在标题排序时崩溃

转载 作者:行者123 更新时间:2023-11-30 23:06:53 26 4
gpt4 key购买 nike

此问题与 What is it about DataTable Column Names with dots that makes them unsuitable for WPF's DataGrid control? 有关.

我正在使用数据网格来显示临时查询生成器的结果,因此数据表列可以是任何内容。

我选择了得票最多的答案 (14)。一切正常,但如果我单击标题对列进行排序,整个应用程序就会崩溃。

错误:

System.IndexOutOfRangeException   HResult=0x80131508   Message=Index was outside the bounds of the array.   Source=AppName   StackTrace:    at AppName.App.ShowUnhandeledException(DispatcherUnhandledExceptionEventArgs e) in <path>\App.xaml.cs:line 51    at AppName.App.AppDispatcherUnhandledException(Object sender, DispatcherUnhandledExceptionEventArgs e) in <path>\App.xaml.cs:line 27 at System.Windows.Threading.Dispatcher.CatchException(Exception e)    at System.Windows.Threading.Dispatcher.CatchExceptionStatic(Object source, Exception e)    at System.Windows.Threading.ExceptionWrapper.CatchException(Object source, Exception e, Delegate catchHandler)    at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)  at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)    at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)    at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)    at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)    at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)   at System.Windows.Application.RunDispatcher(Object ignore)    at System.Windows.Application.RunInternal(Window window)    at System.Windows.Application.Run(Window window)    at System.Windows.Application.Run()    at AppName.App.Main()

这是我的 XAML:

<DataGrid x:Name="DgridQueryResults" Grid.Row="1" Background="LightGray" Margin="5" ItemsSource ="{Binding .}" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeColumns="true" CanUserReorderColumns="False" CanUserSortColumns="True" ClipboardCopyMode="ExcludeHeader"SelectionUnit="Cell" CopyingRowClipboardContent="DgridQueryResults_CopyingRowClipboardContent" Grid.ColumnSpan="2"/>                             

我试过上面的项目来源就像 ItemsSource ="{Binding}"但它仍然崩溃。

我按如下方式以编程方式添加括号:

        private void DgridQueryResults_ColumnSetup()
{
DgridQueryResults.Columns.Clear();
DgridQueryResults.AutoGenerateColumns = false;
foreach (DataColumn column in _results.Columns)
{
var gridColumn = new DataGridTextColumn()
{
Header = column.ColumnName,
Binding = new Binding("[" + column.ColumnName + "]")
};

DgridQueryResults.Columns.Add(gridColumn);
}
}

我在设置项目源之前设置了列,如下所示:

        private void ExecuteSql()
{
if (_dataFormData.GetDataViaReader(_sql))
{
_results = _dataFormData.DT;
DgridQueryResults_ColumnSetup();// <-- column setup
DgridQueryResults.DataContext = _results.DefaultView;

}
else
{
DgridQueryResults.DataContext = null;
}

QueryResults.Focus();
}

注释列设置工作正常,但我不能有违反绑定(bind)的列名称(即句号 (.))。

同时在 XAML 中将 setting user sort 设置为 false 修复了它,但当然,用户无法对数据进行排序。

我在 Framework 4.6.1 上使用 VS 2017 15.5.1。

还有其他人遇到过这种情况吗?我感谢任何帮助。谢谢!

最佳答案

我想通了。添加列时,我必须添加排序成员路径。

private void DgridQueryResults_ColumnSetup()
{
DgridQueryResults.Columns.Clear();
DgridQueryResults.AutoGenerateColumns = false;
foreach (DataColumn column in _results.Columns)
{
var gridColumn = new DataGridTextColumn()
{
Header = column.ColumnName,
SortMemberPath = column.ColumnName, //<--added
Binding = new Binding("[" + column.ColumnName + "]")
};


DgridQueryResults.Columns.Add(gridColumn);
}
}

关于c# - WPF 数据网格在标题排序时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47797269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com