1

私も設定したいナビゲーションプロパティをline持つエンティティであるオブジェクトを作成しています。Tagsオブジェクトにバインドされた datagridview からこのタグ コレクションを取得したいTag:

dgvTags.DataSource = _rs.Tags.Where(x => x.TagGroup.Name == "All Reasons").OrderBy(x => x.Name);

問題のあるコード:

Line l = new Line
{
    Part = o.Part,
    Description = desc,
    Price = o.Price.Value,
    InvoiceNo = o.InvoiceNo,
    Cost = o.Cost.Value,
    Comments = txtComment.Text,
    Tags = dgvTags.SelectedRows as List<Tag> // <--- needs work here
                    };

行にエラーが表示されています:

エラー 5 型 'System.Windows.Forms.DataGridViewSelectedRowCollection' を 'System.Collections.Generic.List' に変換するには、参照変換、ボックス化変換、ボックス化解除変換、ラッピング変換、または null 型変換 C:\SVN\RS\fAddLines を使用できません.cs 142 15 RS

これを行う正しい方法はありますか?

アップデート:

以下のコードで目的の結果を達成できましたが、正しい方法を探しています。

foreach (DataGridViewRow r in dgvTags.SelectedRows)
{
    l.Tags.Add(r.DataBoundItem as Tag);
}
4

2 に答える 2

2

David Hall の功績により、彼は非常に懸命に努力しましたが、最終的には以下のコードが最も簡単な解決策になりました。

foreach (DataGridViewRow r in dgvTags.SelectedRows)
{
    l.Tags.Add(r.DataBoundItem as Tag);
}
于 2012-05-04T13:58:15.237 に答える
1

これは、問題を解決する方法がたくさんあるケースの 1 つです。以下に示すコードは最適ではないかもしれませんが、SelectedRowsコレクションから型指定されたオブジェクトのリストを取得するために機能します。

IList<Tag> myrows = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(x => x.DataBoundItem as Tag).ToList();

これはLinqを使用しており、本質的にあなたの方法と同じです.Linqはforeachを削除することで物事を少し整理しています.


System.Collections.Generic.List<T>コメントで発生している問題は、Linq によって作成された との間に暗黙的な変換がないためですSystem.Data.Objects.DataClasses.EntityCollection<T>

私はこれがうまくいくと信じています:

Tags = new System.Data.Objects.DataClasses.EntityCollection<RS.Tag>(
    dataGridView1.SelectedRows.Cast<DataGridViewRow>()
    .Select(x => x.DataBoundItem as Tab).ToList());

BindingList<T>notへの変換でのみテストしたので、信じると言いますEntityCollection<T>


そして、EntityCollection にはリスト全体を割り当てる方法がないことがわかりました。この質問から: List<t> を EntityCollection<T>に変換またはキャストする 次のコードを思いつきました。

dataGridView1.SelectedRows.Cast<DataGridViewRow>()
    .Select(x => x.DataBoundItem as Tab).ToList().ForEach(y => Tags.Add(y));

私はおそらくこの時点で、ForEachこのワンライナーよりもバニラを好むでしょう.

于 2012-05-04T12:16:37.340 に答える