0

状況:

BindingList<string[]>LINQtoSQLクエリから構築されたものをにバインドしようとしていますDataGridView

問題:

アイテムが生成された後に変更を加えることができませんDataGridView-または-不要なフィールドがたくさんありますDataGridView(使用するコードの反復によって異なります)私はできる限りグーグルで検索し、ほとんどのソリューションを実装しようとしました私はオンラインで役に立たないことを発見しました。

文字列には実際の値に対するパブリックプロパティがないことを私は知っています。私はそれを取得する方法を決定するのに苦労しています(私は問題の一部であると信じています)。

C#

int item = (from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].Modules 
    where p.ModuleName.Equals(clbModules.SelectedItem) 
    select p.ModuleId)
    .FirstOrDefault();

BindingList<string[]> Data = new BindingList<string[]>((
    from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].QuestionAnswers
    where p[2].Equals(item)
    select new string[] { p[0].ToString(), p[3].ToString() })
    .ToList());

dgvQuestions.DataSource = Data;
dgvQuestions.Refresh();

望ましくない動作:

これはバインド後に発生します

datagridview

質問:

  1. なぜこうなった?
  2. どうすれば修正できますか?

追加情報:

どのような追加情報が必要かわかりませんが、要求されたものを提供します。

また、他のコード反復に切り替えると、次のようになります。

int item = (from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].Modules where p.ModuleName.Equals(clbModules.SelectedItem) select p.ModuleId).FirstOrDefault();
            var Data = new BindingList<object>((from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].QuestionAnswers where p[2].Equals(item) select new {Question = p[0].ToString(), Answer = p[3].ToString() }).Cast<object>().ToList());
            dgvQuestions.DataSource = Data;
            dgvQuestions.Refresh();
            dgvQuestions.Columns[1].ReadOnly = false;

データは正しく表示されますが、編集したい列を編集できません。

4

2 に答える 2

1

文字列配列のリストにバインドしていて、配列からプロパティを取得しています。ほとんどの場合、次のようなものが必要です。

var Data = new BindingList<object>((
    from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].QuestionAnswers 
    where p[2].Equals(item) 
    select new {
                Val1 = p[0].ToString(), 
                Val2 = p[3].ToString() 
               }).ToList());
于 2013-02-05T21:13:47.887 に答える
0

グリッドにこれらのフィールドが表示される理由は、各行をにバインドしているためですstring[]。そのため、のプロパティが列として自動的に表示string[]されます。グリッドが配列を解析し、配列の内容を列として使用するための組み込みロジックはありません。

DataGridデータを正しく表示するには、データをカスタムタイプにバインドする必要があります。これにより、タイプのパブリックプロパティが列として使用されます。

于 2013-02-05T21:14:02.380 に答える