加载应用程序后DataGrid为空
本文关键字:为空 DataGrid 应用程序 加载 | 更新日期: 2023-09-27 18:28:24
我有一个包含数据库表信息的DataGrid(如果重要的话可以访问)。
到目前为止,我对数据库有着完美的数据网格工作,但有按钮(显示、添加、删除和编辑),但现在,我想删除按钮,只使用数据网格来完成所有这些功能。
当我在不点击的情况下执行显示按钮时(当wpf加载时自动),它会显示数据表,但当我尝试设置头列时,它会向我显示DataGrid为null(当These DataGrid显示数据库中具有正确信息的表时)。我想在这个问题上得到帮助。谢谢。
代码:
try
{
DataBaseIkuns.Instance.OpenConnectionWithDB();
DataBaseIkuns.Instance.LoadDataFromDB(DictionaryUtilsDB.dictioneary[DictionaryUtilsDB.CommendTypes.ShowIkuns]);
dataGridIkuns.ItemsSource = DataBaseIkuns.Instance.dt.DefaultView;
// ---------------------- Until here it work's perfect - loading the table from the data base with the origin header column
DataBaseIkuns.Instance.SetNameOnHeaderColumn(dataGridIkuns); // here it fall.
DataBaseIkuns.Instance.CloseConnectionWithDB();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
internal void SetNameOnHeaderColumn(Microsoft.Windows.Controls.DataGrid dataGridIkuns)
{
dataGridIkuns.Columns[0].Header = "x"; // Fall because DataGridIkuns colomn count is 0.
dataGridIkuns.Columns[1].Header = "y";
}
错误:索引超出范围。必须是非负数并且小于集合参数名称的大小:索引
当我点击"显示"按钮时,它确实起到了这个作用,而且它的工作非常完美。但当我这样做时,wpf应用程序加载错误。为什么?
顺便说一句,另一个问题是,如果有人知道dataGrid的工作指南(添加、删除和编辑),没有按钮,只有键盘编辑),我会很高兴得到它。
如果让网格为您自动生成列,那么很可能这些列还没有填充。列自动填充不一定在设置ItemsSource
时立即发生;它可能会被推迟,因为网格从未被测量过,或者因为它还没有数据项。
您可以尝试将对SetNameOnHeaderColumn
的调用推迟到稍后,方法是使用BeginInvoke
和DispatcherPriority.Loaded
:在Dispatcher
上进行调度
try
{
DataBaseIkuns.Instance.OpenConnectionWithDB();
DataBaseIkuns.Instance.LoadDataFromDB(/* ... */);
var view = DataBaseIkuns.Instance.dt.DefaultView;
dataGridIkuns.ItemsSource = view;
dataGridIkuns.Dispatcher.BeginInvoke(
DispatcherPriority.Loaded,
new Action(
() =>
{
if (dataGridIkuns.ItemsSource == view)
SetNameOnHeaderColumn(dataGridIkuns);
}));
DataBaseIkuns.Instance.CloseConnectionWithDB();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
既然你问了,这里有一些标准的快捷方式应该与DataGrid
:一起使用
Tab/Shift+Tab
-转到当前行上的下一个/prev单元格,或换行到下一个/prev行Left/Right
-仅转到当前行的上一个/下一个单元格Up/Down
-转到上一行/下一行F2
-编辑所选单元格F4
-打开单元格编辑器下拉列表(编辑一次,如果适用)Esc
-取消编辑Del
-删除当前行(不编辑单元格时)Home/End
-跳转到行中的第一个/最后一个单元格Ctrl+Home/Ctrl+End
-跳转到网格中的第一行/最后一行PgUp/PgDn
-在视图中向上/向下跳一个"页面"Enter/Shift+Enter
-如果正在编辑,则提交当前单元格,然后跳到下一行/上一行中的同一列
我不知道有任何插入新行或跳转到新行占位符的快捷方式。