0

Form1(DGV1) と Form2(DGV2) の 2 つのフォームがあり、両方のフォームに Datagridview コントロールがあります。

Form1 には、ユーザーが Form1 datagridview(DGV1) に行を追加できる Form2 へのボタン リンクがあります。Form2 Datagridview では、最初の列にチェックボックスがあり、ユーザーは一度に 1 行しか選択できません。 Form2 1) 完了 2) アイテムを追加

ユーザーが行を次々に選択して [アイテムの追加] をクリックすると、行が Form1 の datagridview に追加され、[完了] ボタンがクリックされると、追加されたすべての行が Form 1 に表示されます。

以下のコードを使用してこれを達成しました。

int inde x= objQM.gvItemDetails.Rows.Add(); 
DataGridViewRow row = (DataGridViewRow)objQM.gvItemDetails.Rows[index]; 
decimal UnitCos = Convert.ToDecimal(gvInventory.Rows[RowIndex].Cells[8].Value.ToString()); row[0] = false; 
row[1] = 1;
row[2] = gvInventory.Rows[RowIndex].Cells[6].Value.ToString();
row[3] = LoadSellQty();
row[4] = Convert.ToDecimal(gvInventory.Rows[RowIndex].Cells[8].Value.ToString());
row[5] = LoadSellQty() * UnitCost; 
row[7] = Convert.ToInt32(gvInventory.Rows[RowIndex].Cells[1].Value.ToString());

問題は、Form2 で AddItems ボタンをクリックしたときに Form1 の DGV1 に同じ行が追加されるかどうかを検証することです。つまり、重複する行を追加する必要はありません。

4

3 に答える 3

2

DataGridView行から一意の名前を持っていると思います。これを使用してこれを実現できますlinq

bool IsExist = dataGridView1.Rows.Cast<DataGridViewRow>()
                                   .Count(c => !string.IsNullOrWhiteSpace(c.Cells[colIndex].EditedFormattedValue.ToString()) &&
                                   c.Cells[colIndex].EditedFormattedValue.ToString().Trim() == dgv[colIndex, rowIndex].EditedFormattedValue.ToString()) > 1;

if (IsExist)
{
   //do stuff
}

UPDATEベースItemID

bool IsExist = dataGridView1.Rows.Cast<DataGridViewRow>()
                      .Count(c => 
                      c.Cells[colIndexOfItemId]
                      .EditedFormattedValue.ToString() == ItemID) > 1; //or (int)c.Cells[colIndexOfItemId].Value
于 2013-02-08T06:11:35.737 に答える
0

私は次のように2つの異なる方法を試しますが、解決策#2を好みます:

  1. 行数が少ない場合は自分でループを書くだけで、値を1つずつチェックするだけで、コードが見栄えが悪くなります。

  2. DataSet または DataTable を使用している場合は、実際にすべての列を含む DataTable に UniqueConstraint を追加してみてください。したがって、重複した行が追加された場合、例外がスローされ、それがわかります。詳細については、こちらをご覧ください

于 2013-02-08T05:55:55.633 に答える
0
 private void dgViewOrderList_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0 && dgViewOrderList.CurrentCell.Value != null)
            {
                var cellValue = dgViewOrderList.CurrentCell.Value.ToString();
                var isExist = dgViewOrderList.Rows.Cast<DataGridViewRow>().Count(c =>c.Cells[0].EditedFormattedValue.ToString() == cellValue) > 1;
                if (isExist)
                {
                    dgViewOrderList.CurrentCell.Value = null;
                }
            }
        }
    }
于 2015-02-25T21:41:02.240 に答える