我有DataGrid包含DataBase表信息(访问是否重要)。
到目前为止,我已经完成了数据网格工作与数据库,但有按钮(显示,添加,删除和编辑),但现在,我想删除按钮并仅使用dataGrid执行所有这些功能。
当我在没有点击的情况下执行show按钮时(在wpf加载时自动执行)它显示数据表但是当我尝试设置标题列时它向我显示DataGrid为null(当这些dataGrid显示为&时)来自数据库的表格和正确的信息)。我想得到这个问题的帮助。感谢' S
代码:
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";
}
错误:索引超出范围。必须为非负且小于集合参数名称的大小:index
当我点击"显示"按钮它完成了这个功能,它的工作非常完美。但是,当我执行它时,wpf appliaction加载错误。为什么呢?
顺便说一下另一个问题,如果有人知道使用dataGrid(添加,删除和编辑)的工作指南而没有按钮,只有键盘编辑)我很乐意得到它。
答案 0 :(得分:0)
如果您让网格自动为您生成列,那么可能还没有填充列。在设置ItemsSource
时,列自动填充不一定立即发生;它可能会延迟,因为网格从未被测量过,或者因为它还没有数据项。
您可以尝试将来电推迟至SetNameOnHeaderColumn
,直到Dispatcher
使用BeginInvoke
DispatcherPriority.Loaded
安排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
的标准快捷方式:
Left/Right
- 转到当前行的下一个/上一个单元格,或者转到下一个/上一行Up/Down
- 转到当前行的上一个/下一个单元 F2
- 转到上一行/下一行F4
- 编辑所选单元格Esc
- 打开单元格编辑器下拉菜单(编辑后,如果适用)Del
- 取消修改Home/End
- 删除当前行(不编辑单元格时)Ctrl+Home/Ctrl+End
- 跳转到行中的第一个/最后一个单元格PgUp/PgDn
- 跳转到网格中的第一行/最后一行Enter/Shift+Enter
- 在视图中向上/向下跳转一个“页面”我不知道插入新行或跳转到新行占位符的任何快捷方式。