このシナリオの解決策を見つけることに悩まされています:Cのリストに項目を残してください
私は2つのデータグリッド(DevExpress)を持っています。左側のグリッドには、いくつかのテンプレート値(行)があります。クリックイベントでは、選択した項目を左グリッドから右グリッドに移動する2つのグリッド間に1つの移動ボタンがあります。その値をコピーする前に、その値がすでに正しいグリッドに存在するかどうかを確認する必要があります。 If:既存のメッセージを表示します。存在しない場合は、選択した値を右のグリッドに追加します。 - 左側のグリッドである
private void btnMove_Click(object sender, EventArgs e)
{
ClosingStockTemplateModel _mClosingStockTemplateModel = (ClosingStockTemplateModel)gridViewAvailableTemplates.GetRow(gridViewAvailableTemplates.FocusedRowHandle);
ClosingStockTemplateModel currentTemplateRow = new ClosingStockTemplateModel();
ModelCollection<ClosingStockTemplateModel> currentTemplateList = new ModelCollection<ClosingStockTemplateModel>();
for (var i = 0; i < currentTemplateList.Items.Count; i++)
{
currentTemplateRow = (ClosingStockTemplateModel)gridViewTemplatesToPrint.GetRow(i);
currentTemplateList.Items.Add(currentTemplateRow);
}
if (currentTemplateList.Items.Contains(_mClosingStockTemplateModel))
{
MessageBox.Show("Item has already been selected.");
return;
}
else
{
currentTemplateList.Items.Add(_mClosingStockTemplateModel);
grdTemplatesToPrint.DataSource = null;
grdTemplatesToPrint.DataSource = currentTemplateList.Items.OrderBy(i => i.TEMPLATE);
}
}
gridViewAvailableTemplates
:コードで
私はこの値を保持しているコレクションを持っています。 gridViewTemplatesToPrint
- 右側のグリッドです。私はこのコードでやっている何を
は次のとおりです。
- 左グリッドで現在選択されている行を取得します:
- (私は比較のために、この以降を使用します、私は右のグリッドからすべての項目を追加する新しいコレクションを作成します。私がすでに選択したものをチェックする)。
- 右グリッドの行をループして、一時的なコレクションにアイテムを追加します。
- チェックは
currentTemplateList
に含まれています。 - の場合は、
DataSource
をcurrentTemplateList.Items
に設定してメッセージを表示します(右グリッドに追加しない場合)。
問題はここに起こる:
ModelCollection<ClosingStockTemplateModel> currentTemplateList = new ModelCollection<ClosingStockTemplateModel>();
私はModelCollection
の作成およびインスタンスする必要がありますが、私はボタンの移動リストをクリックするたびにインスタンス化されますし、それがクリアされています。移動ボタンを初めてクリックすると、右側のグリッドがまだ空であるが、その後、私はcurrentTemplateList
が不明であることに問題があるされている場合にのみcurrentTemplateList
のきれいなインスタンスを作るために
ModelCollection<ClosingStockTemplateModel> currentTemplateList;
if(gridViewTemplatesToPrint.RowCount == 0)
{
currentTemplateList = new ModelCollection<ClosingStockTemplateModel>();
}
else
{
for (var i = 0; i < currentTemplateList.Items.Count; i++)
{
currentTemplateRow = (ClosingStockTemplateModel)gridViewTemplatesToPrint.GetRow(i);
currentTemplateList.Items.Add(currentTemplateRow);
}
}
:だから私はこのような何かを試してみましたローカル変数else
にあります。 これを解決するいくつかのきれいな方法がありますか?このコードでは、新しいアイテムは右側のグリッドに追加されないため、毎回削除され、右側には最後に移動したアイテムしかありません。私は、グリッドが空でないときにコレクション内の既に選択されたアイテムを永続化する方法を見つける必要があります。あなたはDataSource
を毎回設定する必要はありません
MVVMを使用し、viewmodelで実行します。 –