我現在有些困惑Datagridview僅在具有異步數據訪問的行中顯示數據?
我,如果我調試下面的方法,設置在DataGrid
的_context變種是從實體框架
每行的單元格的所有數據的方法這樣,所有的數據被設置爲細胞,但數據未顯示
,但只要我刪除第一行註釋的方法(它只是用於測試,無處使用的)一切工作
所以對我來說,它好像有顯示
我搜索的谷歌,但沒有發現任何類似的數據需要進行一些異步訪問
它真的只是在這使得該方法的第一行工作,並沒有任何地方的任何參考公正的任務列表
如果我把第一行的方法結束它不再工作,所以它的工作,只要有一個異步訪問工作之前,每個循環都被調試
並且不,我不能使所有的異步導致我h廣告的一些錯誤,以及一切工作與同步數據訪問
沒有寫代碼,以及,我知道這是在DataGridView
沒有人知道什麼是錯在這裏加載數據的壞的方式?
問候
編輯:剛剛發現,與該行註釋掉,每一次的foreach LOPP的一個新的迭代開始前一行的單元格的值被複位,不這是如何發生的
private async Task InitializeProcessGroupsDgv()
{
//List<Test> justATest = await _context.Test.ToListAsync();
List<ProcessGroup> processGroups = _context.ProcessGroup.ToList();
_view.Dgv_ProcessGroups.AutoGenerateColumns = false;
_view.Dgv_ProcessGroups.DataSource = processGroups;
// that the cheboxes for the locks can have 3 states
((DataGridViewCheckBoxColumn)_view.Dgv_ProcessGroups.Columns[13]).ThreeState = true;
((DataGridViewCheckBoxColumn)_view.Dgv_ProcessGroups.Columns[14]).ThreeState = true;
foreach (DataGridViewRow row in _view.Dgv_ProcessGroups.Rows)
{
// set all TestOption-Checkboxes
for (int i = 0; i < 8; i++)
{
if (_curTestRes != null)
{
row.Cells[i + 1].Value = ((ProcessGroup)row.DataBoundItem).TestResourceProcessGroup.Where(x => x.TestResourceID == _curTestRes.ID).First().TestOptionTestRessourceProcessGroup.Where(x => x.TestOption.Name == row.Cells[i+1].OwningColumn.HeaderText).FirstOrDefault()?.Activated;
}
else
{
row.Cells[i + 1].Value = false;
}
}
var testResProcGr = ((ProcessGroup)row.DataBoundItem).TestResourceProcessGroup?
.Where(trpg => trpg.TestResourceID == _curTestRes?.ID)?.SingleOrDefault();
// load NrOfImpressions
row.Cells[10].Value = testResProcGr?.NrOfImpressions;
// set the Lock-CheckBoxes
DataGridViewCheckBoxCell dinCell = (DataGridViewCheckBoxCell)row.Cells[13];
DataGridViewCheckBoxCell astmCell = (DataGridViewCheckBoxCell)row.Cells[14];
List<IntrusionBody> ibs = _context.IntrusionBody.Where(x => x.ProcessGroupID == ((ProcessGroup)row.DataBoundItem).ID).ToList();
foreach (var item in ibs)
{
((DataGridViewComboBoxCell)row.Cells[12]).Items.Add(item);
}
((DataGridViewComboBoxCell)row.Cells[12]).ValueMember = "ID";
((DataGridViewComboBoxCell)row.Cells[12]).DisplayMember = "Name";
if (testResProcGr == null)
{
// if new TestRessource => disable lock checkboxes
dinCell.ReadOnly = true;
dinCell.Value = CheckState.Indeterminate;
dinCell.FlatStyle = FlatStyle.Flat;
dinCell.Style.ForeColor = Color.DarkGray;
astmCell.ReadOnly = true;
astmCell.Value = CheckState.Indeterminate;
astmCell.FlatStyle = FlatStyle.Flat;
astmCell.Style.ForeColor = Color.DarkGray;
}
else
{
// DIN
if (testResProcGr.DINLocked == null)
dinCell.Value = CheckState.Indeterminate;
else
dinCell.Value = (bool)testResProcGr.DINLocked ? CheckState.Checked : CheckState.Unchecked;
// ASTM
if (testResProcGr.ASTMLocked == null)
astmCell.Value = CheckState.Indeterminate;
else
astmCell.Value = (bool)testResProcGr.ASTMLocked ? CheckState.Checked : CheckState.Unchecked;
row.Cells[11].Value = testResProcGr.NrOfTestPerDay;
((DataGridViewComboBoxCell)row.Cells[12]).Value = testResProcGr.IntrusionBody;
row.Cells[15].Value = testResProcGr.Active;
row.Cells[16].Value = testResProcGr.TestResourceProcessGroupCertification.Where(x => x.Date.Year == DateTime.Now.Year).FirstOrDefault()?.DIN;
row.Cells[17].Value = testResProcGr.TestResourceProcessGroupCertification.Where(x => x.Date.Year == DateTime.Now.Year).FirstOrDefault()?.ASTM;
}
}
}
如果從方法中刪除異步或不同意(當然,當我同步嘗試時刪除它) 如果您有一個標記爲async但沒有等待的方法,該方法將運行同步,所以這不是錯誤 正如我所說,如果我刪除everythign異步它不起作用,如果我只是在foreach循環上面的方法中放置一些異步語句它工作正常,這是我的問題 – Claus