本主题列出了在使用 DataRepeater 控件时可能会出现的一些常见问题。
未能引发 DataRepeater 键盘和鼠标事件
未能引发某些 DataRepeater 控件事件,如键盘和鼠标事件。这是设计使然。DataRepeater 控件自身是 DataRepeaterItem 对象的容器,不能在运行时访问。DataRepeaterItem 在设计时不公开事件。因此,当某个项具有焦点时单击该项或按键盘键不能引发事件。
这种情况的例外是:Padding 属性设置为足够大的值,暴露了 DataRepeater 控件的边缘。在这种情况下,在暴露的边距内单击会引发鼠标事件。
若要解决此问题,请向 DataRepeater 控件的 ItemTemplate 部分添加一个 Panel 控件,再将其他控件添加到 Panel 中。然后可以向 Panel 控件的键盘和鼠标事件的事件处理程序中添加代码。
DataRepeater 部分隐藏在绑定导航器后面
当首次将 DataRepeater 控件添加到窗体中,然后从**“数据源”窗口中添加数据绑定控件时,BindingNavigator 控件可能会显示在 DataRepeater 控件的顶部。这是“数据源”**窗口的一个已知局限性,与其他控件(如 DataGridView 控件)的行为一致。
您可以在设计时移动 DataRepeater,使其低于 BindingNavigator 控件,或向 Load 事件处理程序中添加与下面类似的代码。
DataRepeater1.Top = ProductsBindingNavigator.Height
dataRepeater1.Top = productsBindingNavigator.Height;
运行时某些控件无法正确显示
运行时 DataRepeater 控件中的某些控件不能按照预期的方式显示。用于将控件从 ItemTemplate 克隆到 DataRepeaterItem 的过程并不能总是确定所有控件的所有属性。例如,如果在设计时将未绑定的 ListBox 控件添加到 DataRepeater 控件并用字符串列表填充它的 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)
如何:使用两个 DataRepeater 控件创建主/详细信息窗体 (Visual Studio)