DataRepeater コントロールのトラブルシューティング (Visual Studio)
ここでは、DataRepeater コントロールを使用するときに発生する可能性のある一般的な問題について説明します。
DataRepeater のキーボード イベントおよびマウス イベントが発生しない
キーボード イベントやマウス イベントなどの一部の DataRepeater コントロール イベントは発生しません。 これは仕様に基づく制限事項です。 DataRepeater コントロール自体は DataRepeaterItem オブジェクトのコンテナーであるため、実行時にはアクセスできません。 DataRepeaterItem は、デザイン時にイベントを公開しません。 したがって、項目をクリックしても、項目にフォーカスがあるときにキーを押しても、イベントは発生しません。
ただし、Padding プロパティが大きい値に設定されているために DataRepeater コントロールの端が隠されていない場合は例外です。 この場合、隠されていない余白部分をクリックするとイベントが発生します。
この問題を解決するには、Panel コントロールを DataRepeater コントロールの ItemTemplate セクションに追加し、それ以外のコントロールをすべて Panel に追加します。 次に、Panel コントロールのキーボード イベントおよびマウス イベントのイベント ハンドラーにコードを追加します。
DataRepeater が部分的にバインド ナビゲーターの後ろに隠れる
フォームに先に DataRepeater コントロールを追加し、次に [データ ソース] ウィンドウからデータ バインド コントロールを追加した場合、BindingNavigator コントロールが DataRepeater コントロールの上に重なって表示される場合があります。 これは [データ ソース] ウィンドウの既知の制限事項であり、DataGridView などの他のコントロールの場合と同じ動作です。
この問題を解決するには、デザイン時に DataRepeater コントロールを BindingNavigator コントロールより下へ移動するか、Load イベント ハンドラーに次のようなコードを追加します。
DataRepeater1.Top = ProductsBindingNavigator.Height
dataRepeater1.Top = productsBindingNavigator.Height;
実行時にコントロールが正しく表示されない
DataRepeater コントロール内の一部のコントロールが、実行時に意図したとおりに表示されない場合があります。 ItemTemplate から DataRepeaterItem にコントロールを複製する処理では、必ずしもすべてのコントロールのすべてのプロパティが特定されるわけではありません。 たとえば、デザイン時に DataRepeater コントロールに非バインド ListBox コントロールを追加し、その Items コレクションを文字列リストで設定した場合、ListBox は実行時には空になります。 これは、Items プロパティが複製処理の対象とならないからです。
この問題は、複製されないプロパティを ItemCloned イベントで復元するなどの方法で解決できます。このイベントは既定の複製処理が完了した後に発生します。 ItemCloned イベント ハンドラーで、ListBox コントロールの Items コレクションを修復する方法を次の例に示します。
Private Sub DataRepeater1_ItemCloned(
ByVal sender As Object,
ByVal e As Microsoft.VisualBasic.PowerPacks.DataRepeaterItemEventArgs
) Handles DataRepeater1.ItemCloned
Dim Source As ListBox =
CType(DataRepeater1.ItemTemplate.Controls.Item("ListBox1"), ListBox)
Dim ListBox1 As ListBox =
CType(e.DataRepeaterItem.Controls.Item("ListBox1"), ListBox)
For Each s As String In Source.Items
ListBox1.Items.Add(s)
Next
End Sub
private void dataRepeater1_ItemCloned(object sender,
Microsoft.VisualBasic.PowerPacks.DataRepeaterItemEventArgs e)
{
ListBox Source = (ListBox)dataRepeater1.ItemTemplate.Controls["listBox1"];
ListBox listBox1 = (ListBox)e.DataRepeaterItem.Controls["listBox1"];
foreach (string s in Source.Items)
{
listBox1.Items.Add(s);
}
}
項目ヘッダーに選択記号が表示されない
DataRepeater コントロールで項目ヘッダーの SelectionColor プロパティを変更すると、選択した色によっては選択記号が見えなくなることがあります。 ItemHeaderSize プロパティを変更することによっても選択記号が見えなくなることがあります。
選択記号の色とサイズは変更できません。
SelectionColor を White に設定すると、項目が初めて選択されたときに選択記号は見えません。
SelectionColor を Black に設定すると、コントロールが選択されているときは選択記号が見えず、コントロールが編集モードのときは鉛筆の記号が見えません。
ItemHeaderSize プロパティが 11 未満の値に設定されている場合、項目ヘッダー内のインジケーター記号は表示されません。
独自の項目ヘッダーと選択記号を設定するには、PictureBox コントロールを使用し、DataRepeater コントロールの DrawItem イベントで DataRepeaterItem の IsCurrent プロパティを監視します。 詳細については、「IsCurrent」を参照してください。
参照
処理手順
方法 : DataRepeater コントロールにバインドされたデータを表示する (Visual Studio)
方法 : DataRepeater コントロールに非バインド データを表示する (Visual Studio)
方法 : DataRepeater コントロールのレイアウトを変更する (Visual Studio)
方法 : DataRepeater コントロールの外観を変更する (Visual Studio)
方法 : DataRepeater コントロールに項目ヘッダーを表示する (Visual Studio)
方法 : DataRepeater の項目の追加と削除を無効にする (Visual Studio)
方法 : DataRepeater コントロールでデータを検索する (Visual Studio)
方法 : 2 つの DataRepeater コントロールを使用してマスター/詳細形式のフォームを作成する (Visual Studio)