2016-03-30 17 views
0

名前とテキストの2つのパブリックプロパティを持つクラスがあります。私はDataGridViewをこれらのオブジェクトのリストにバインドしたいので、BindingList <>にロードしました。私は、DataGridViewのNameプロパティを表示するだけですが、両方の列を取得しています。私は間違って何をしていますか?BindingListにバインドされたDataGridViewの列数が多すぎます

あなたはそれが両方の列に表示されていることのために、

dgvTagNames.DataSource = m_definitions; 

を設定している@Robert

private void fileOpenTextBox1_FileSelected(object sender, string e) 
{ 
    m_definitions = new BindingList<TagSimDefinition>(TagSimDefinition.Read(e)); 

    dgvTagNames.AutoGenerateColumns = false; 
    dgvTagNames.Columns.Clear(); 
    DataGridViewCell cell = new DataGridViewTextBoxCell(); 
    DataGridViewTextBoxColumn colTagName = new DataGridViewTextBoxColumn() 
    { 
     CellTemplate = cell, 
     Name = "colTagName", 
     HeaderText = "Tag Name", 
     DataPropertyName = "Name" 
    }; 

    dgvTagNames.Columns.Add(colTagName); 
    dgvTagNames.DataSource = m_definitions; 
} 
+1

表示しているコードでは2つの列が生成されません。 – LarsTech

+0

私が示したコードは、私のために2つの列を生成しますが、私はあなたに同意する必要はないと同意します。 –

答えて

1

m_definitions = new BindingList<TagSimDefinition>(TagSimDefinition.Read(e)); 
dgvTagNames.Columns.Clear(); 
DataGridViewCell cell = new DataGridViewTextBoxCell(); 
DataGridViewTextBoxColumn colTagName = new DataGridViewTextBoxColumn() 
{ 
    CellTemplate = cell, 
    Name = "colTagName", 
    HeaderText = "Tag Name", 
    DataPropertyName = "Name" 
}; 

dgvTagNames.Columns.Add(colTagName); 

dgvRegion.Rows.Clear(); 
int index = 0; 
foreach (var dparam in m_definitions) 
{ 
    dgvTagNames.Rows.Add(); 
    dgvTagNames["colTagName", index].Value = dparam.<Property1>;           
    dgvTagNames.Rows[index].Tag = dparam; 
    index++; 
} 
+0

2番目の解決策がデータバインディングを使用していないかのように見えます。 1つの列を持つデータグリッドビューを作成してから、リストを歩き、一度に1つのアイテムだけグリッドにデータを追加します。グリッドからリストに戻っていない。グリッドのタグ名を変更すると、その変更がリストに反映されるとは思われません。 –

+0

あなたの最初の解決策は、私が探していたものです。どうもありがとう! 1つの小さなこと:データプロパティ名は "colTagName"ではなく "Name"に設定する必要があります。 –

+0

ohh @ROBERTRICHARDSONそれはうまく働いていると感じていますし、プロパティ名がわかりました。私はそれをテストしていないと混乱していました:Pはちょうど文字列を与えました。 2番目の解決策はうまくいくはずですが、時間がかかり、大量のデータに時間がかかると思われるバインディングループを使用していません。あなたのコメントをありがとうございます。 – bluetoothfx

1

ここで誰もが複雑にwayyyyyyyものを作っている:あなたが1列を取得したい場合は、次のように

m_definitions = new BindingList<TagSimDefinition>(TagSimDefinition.Read(e)); 

dgvTagNames.AutoGenerateColumns = false; 
dgvTagNames.Columns.Clear(); 
dgvTagNames.ColumnCount = 1; 
dgvTagNames.Columns[0].Name = "colTagName"; 
dgvTagNames.Columns[0].DataPropertyName = "colTagName"; 
dgvTagNames.DataSource = m_definitions; 

別の解決策を、それを使用。表示したくない列がある場合は、データソースの設定後にColumn.Visible = falseを設定するだけです。

dgvTagNames.Columns[index].Visible = false; 
+0

この問題は、非表示にする列のインデックスを知る必要があることです。私はプログラムを実行するまでこれを必ずしも知っているとは限りません。 TagSimDefinitionに別のパブリックプロパティを追加する場合は、ここでやり直して新しいカラムを非表示にする必要があります。私が作成する可能性のある他の公共施設の数にかかわらず、私が関心を持っている1つの列だけを確実に表示したいと考えています。 –

関連する問題