【发布时间】:2017-12-31 19:24:19
【问题描述】:
我有一个Task,它会抛出DataGridRow 并执行一些任务。当他完成时,为该行设置background color。我添加了取消button 以停止任务,并继续button 以继续上次完成的位置。除了更改行的背景颜色外,所有工作都很完美。
这是 XAML 代码,我是 WPF 新手,所以对于 DataGrid 来说并不太大
<DataGrid
Name="dataGridViewMyGroups"
Grid.Row="0" ColumnWidth="*"
VerticalScrollBarVisibility="Auto"
IsReadOnly="True"
SelectionUnit="FullRow"
SelectionMode="Single"
MouseDoubleClick="dataGridViewMyGroups_MouseDoubleClick">
</DataGrid>
这是一个用于更改背景颜色的 C# 代码。
DataGridRow rowColor = (DataGridRow)dataGridViewMyGroups.ItemContainerGenerator
.ContainerFromIndex(number);
rowColor.Background = new SolidColorBrush(System.Windows.Media.Color.FromRgb(223, 227, 238));
当我单击开始Button 并更改每个Row 的Background 颜色时,此代码有效。问题是当我点击取消Button,然后点击继续Button,然后我得到NullReferenceException。继续按钮仅检查 DataBase Table 中的最后一个 ID。
int number=0;
foreach (GroupsInList group in dataGridViewMyGroups.Items)
{
if (fbgroupID != null && check==true)
{
number++;
if (fbgroupID != groupLink)
{
continue;
}
check = false;
continue;
}
//Do something and change background (code above).
number++;
}
continue Button 的代码除了改变行的背景之外工作。
更新:
取消代码Button:
if (MessageBox.Show("Do you want to stop posting?", "Confirmation",
MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
tokenSource.Cancel();
}
继续代码Button:
int postID;
string fbGroupID;
int listID;
using (OleDbConnection connection = new OleDbConnection(conn))
{
//code for getting value from `DB Table`
postID = list[0].PostID;
fbGroupID = list[0].FBGroupID;
listID = list[0].ListForGroupID;
}
cmbSelectList.SelectedValue = listID;
cmbSavedPosts.SelectedValue = postID;
loadGroupsInList(); //Maybe this is problem because here I update(reload) DataGrid again.
tokenSource = new CancellationTokenSource();
try
{
await TaskPostToGroup(tokenSource.Token, fbGroupID, true);
}
catch (OperationCanceledException ex)
{
System.Windows.MessageBox.Show(ex.Message, "CANCELED", MessageBoxButton.OK, MessageBoxImage.Stop);
}
catch (NullReferenceException)
{
//I don't have solution for changing background color for each row when continue button is clicked
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace, "Exception", MessageBoxButton.OK, MessageBoxImage.Error);
}
【问题讨论】:
-
您能否完整发布您的代码 - 您的取消和继续按钮代码?
-
正如我所说的,问题不在取消和继续按钮代码中。因为当我删除代码行以更改背景时,所有工作都有效。取消按钮仅发送取消令牌请求。按照我写的继续:在
DB Table中获取最后一个 ID 的 3 个字符串并使用 foreach 循环调用任务 -
这不是重点;我无法重现您的问题和/或在没有看到完整情况的情况下尝试找出问题。你的问题一开始就很难理解。
-
您在Continue 按钮代码的哪个位置调用DataGrid 行颜色更改代码?在 loadGroupsInList() 之后?由于您收到 NullReferenceException,我猜数据网格没有您指定的行号?请调试您的程序并找出哪一行引发了异常。
-
await TaskPostToGroup(tokenSource.Token, fbGroupID, true);是执行 foreach 循环的代码的一部分,我有用于更改背景颜色的代码。为了更改背景颜色,我得到NullReferenceException。我有int number在 foreach 循环结束时递增。
标签: c# wpf datagrid row background-color