2009-02-26 74 views
0

vb.netパワーパックのwinform datarepeaterコントロールを使用しています。DataRepeater(VB.Net PowerPack)を反復する

リピータのすべてのアイテムは、チェックボックスの列を除いて読み取り専用です。

アイテムを繰り返し処理し、どのチェックボックスがオンになっているかを確認します。

私はコントロールでdatarepeateritemsのコレクションを見つけることができず、ヘルプが不十分です。

ありがとうございました。

答えて

0

あなたがコントロールリストを反復可能性(テンプレートから生成)

  1. は「checkBoxUnbound」のDataRepeaterであなたのチェックボックスの名前を変更しています

  2. 使用以下のコード

    private void button3_Click(object sender, EventArgs e) 
    { 
        int i = 0; 
        CheckBox unboundCheckBox; 
        foreach (Control c in dataRepeater1.Controls) 
        { 
         unboundCheckBox = c.Controls["checkBoxUnbound"] as CheckBox; 
         if (unboundCheckBox != null && unboundCheckBox.Checked) 
         { 
          i++; 
         } 
        } 
    
        Console.WriteLine("DEBUG: checked found: " + i); 
    
    } 
    
+0

私はこれをテストしましたが、私のコントロールに合ったものよりも多くのアイテムがある場合、これはうまくいかないでしょう。つまり、スクロールで表示されるコントロールは 'dataRepeater1.Controls'には表示されません。 @ピーター・グフェーダー、どんなアイデア? – Joel

+0

うーん...現時点ではありません。たぶん、すべてのコントロールを反復する別の方法があります。私はそれが ".Controls"であることを期待していた –

+0

可能な回避策: 'List '、 'Collection'または同じ種類のものは、行の選択などの可能な変更を追跡します。私のために)、私は 'DataRepeater_ItemClick' ou' DataRepeater_DrawItem'のような要素を正しく表示/更新するためのイベントを持っていませんでした。反復するとき、 'DataRepeater'の代わりにリスト/コレクションを繰り返し処理します。洗練されたソリューションではありませんが、機能します。 – Joel

0

なぜデータレピータのデータソースをチェックするだけではないのですか?

など。私は人のためのBindingSourceにバインドされたのDataRepeater 参照ボタンハンドラ

private void Form1_Load(object sender, EventArgs e) 
    { 
     List<Person> persons = new List<Person>(); 
     persons.Add(new Person { Name = "Peter", IsLocal = true }); 
     persons.Add(new Person { Name = "Sepp", IsLocal = false }); 
     persons.Add(new Person { Name = "Franz", IsLocal = false }); 

     personBindingSource.DataSource = persons; 
    } 


    private void buttonCountCheckBox_Click(object sender, EventArgs e) 
    { 
     int i = 0; 

     foreach (Person singlePerson in personBindingSource) 
     { 
      if (singlePerson.IsLocal) 
      { 
       i++; 
      } 

     } 
     Console.WriteLine("DEBUG: checked found: " + i); 
    } 
+0

チェックボックスはバインドされておらず、データソースの一部でもありません。これは最初の列で、アクションを確認するために使用されます。選択されたすべてを削除します。 –

+0

他の回答を見る –

2

これは、しばらく前に頼まれたが、念のために誰が答えを探しています:

for (int i = 0; i < this.dataRepeater1.ItemCount; i++) 
{ 
    this.dataRepeater1.CurrentItemIndex = i; 

    CheckBox checkBox = (CheckBox) 
       this.dataRepeater1.CurrentItem.Controls["controlName"]; 
    bool isChecked = checkBox.Checked; 
} 

このアプローチは、それははるかに簡単に同じリピーターアイテムに関連するすべてのコントロールを読む/処理することができます。