4

CheckBox列を含むDataGridViewがあります。(これは在庫システムです。)このチェックは、アイテムのシリアル番号を社内のある場所から別の場所に移動するために使用されます。

また、現在、従業員が移動するアイテムの数を入力し、適切なシリアル番号を確認してアイテムを移動するテキストボックスもあります。

チェックしたシリアル番号の数に応じて、テキストボックス内の番号を生成したいのですが。それも可能ですか?私はこの時点で約100の異なる解決策を試しましたが、それらはすべて奇妙なエラーで終わるか、まったく結果が得られません。

4

1 に答える 1

1

テストされていませんが、これは十分に近いはずです。同じ問題を抱えていたときに、これに関する記事を1、10回読んだことがあります。秘訣は、ボックスがクリックされたときにすぐに編集をコミットすることです。これにより、CellValueChangedイベントがトリガーされます。その後、そこからカウントを取得できます。

チェックボックスをオンまたはオフにすると、テキストボックスが更新されます。

private void dgv_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dgv.IsCurrentCellDirty && dgv.CurrentCell.OwningColumn.Name == "MyCheckColumn")
        dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex == -1) //just a guard for the header row
        return;

    if (dgv.Columns[e.ColumnIndex].Name == "MyCheckColumn")
        textBox.Text = dgv.Rows.Cast<DataGridViewRow>().Count(r => Convert.ToBoolean(r.Cells["MyCheckColumn"].Value)).ToString();
}

うまくいけば、Linqは機能します。foreachそうでない場合は、sum変数を使用して昔ながらの方法で実行する必要があります。私はDataGridViewRowCollection時々気難しいことがあることを知っています。

于 2012-10-26T18:55:52.973 に答える