Task
はDataGridRow
を投げて何らかの作業をします。彼が終了すると、その行にbackground color
を設定します。キャンセルを追加してbutton
タスクを停止し、最後に終了したところでbutton
を続行します。行の背景色を変更する以外はすべて完璧に動作します。データグリッドの行の背景色を設定するWPF - ループ
これは、XAMLコードで、私はWPFに新たなんだので、それはここでDataGrid
<DataGrid
Name="dataGridViewMyGroups"
Grid.Row="0" ColumnWidth="*"
VerticalScrollBarVisibility="Auto"
IsReadOnly="True"
SelectionUnit="FullRow"
SelectionMode="Single"
MouseDoubleClick="dataGridViewMyGroups_MouseDoubleClick">
</DataGrid>
には大きすぎるではありません背景色を変更するためのC#コードです。私はスタートButton
をクリックすると、それは各ためBackground
色を変更
DataGridRow rowColor = (DataGridRow)dataGridViewMyGroups.ItemContainerGenerator
.ContainerFromIndex(number);
rowColor.Background = new SolidColorBrush(System.Windows.Media.Color.FromRgb(223, 227, 238));
このコード作品。問題は私が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++;
}
行の背景を変更する以外Button
仕事を続けるためのコード。
UPDATE:Button
をキャンセルため コード:Button
を続行ため
if (MessageBox.Show("Do you want to stop posting?", "Confirmation",
MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
tokenSource.Cancel();
}
コード:
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);
}
あなたが完全な形であなたのコードを投稿できる - あなたのキャンセル及びContinueボタンコードの両方を? – Sach
私は問題がキャンセルではなく、ボタンコードを続けると述べています。バックグラウンドを変更するためのコード行を削除するとすべてが機能するからです。キャンセルボタンのみトークンリクエストをキャンセルします。私が書いたように続けてください:最後のIDのための3つの文字列を 'DBテーブル'に入れ、foreachループを使ってタスクを呼び出してください。 – MiOnIs
これは重要なことではありません。私はあなたの問題を再現することはできません、そして/または完全な画像を見ることなく問題を理解しようとすることはできません。あなたの質問は最初は分かりません。 – Sach