所以我有一个WPF窗口,有一个tabcontrol它有4个表项.
首先在中放置数据网格时TAB项,并将其绑定到datatable,它可以像这样工作:
private void LoadServices()
{
if (serviceData.GetAllServices(currentID) != null)
{
dataGridServices.ItemsSource = serviceData.GetAllServices(currentID).DefaultView;
dataGridServices.Columns[0].Visibility = Visibility.Hidden;
}
}
(顺便说一句,我在window_contentrender中调用上述方法)事件,它工作正常)。
然后在第二个中添加另一个数据网格表项与完全相同的代码,但现在我得到下面一行的错误:">索引超出范围。必须非负且小于集合的大小。(参数的指数)的":
dataGridServices.Columns[0].Visibility = Visibility.Hidden;
调试时,鼠标悬停在ItemSource上属性,我可以看到这里有三列,它怎么可能是index out of range?顺便说一下,绑定到第二个数据网格的方法与上面相同,我也从Window_ContentRendered调用它活动。
(只是为了清楚,当我不隐藏特定的列时,数据也会与存储过程中定义的列名一起加载)
在WPF中,数据网格和表控件的协同工作方式有什么独特之处吗?最新代码:
XAML:
<TabControl x:Name="tabControl">
<TabItem x:Name="FirstTabItem" Header="First">
<DataGrid x:Name="datagridServicesFirstTab">
</DataGrid>
</TabItem>
<TabItem x:Name="SecondTabItem" Header="Second">
<DataGrid x:Name="datagridServices" AutoGeneratedColumns="OnLoaded" >
</DataGrid>
</TabItem>
</TabControl>
事件处理方法:
private void OnLoaded(object sender, EventArgs e)
{
LoadServices();
}
数据方法:
private void LoadServices()
{
if (serviceData.GetAllServices(currentID) != null)
{
datagridServices.ItemsSource = serviceData.GetAllServices(currentID).DefaultView;
datagridServices.Columns[0].Visibility = Visibility.Hidden;
}
}
当调试和悬停在ItemSource属性上时,我可以看到那里有三列,那么它怎么可能是索引超出范围呢?
可能是因为DataGrid
的列还没有生成。在选择选项卡之前,选项卡项的内容不会呈现。
将代码从Window_ContentRenderer
移动到第二个DataGrid
的AutoGeneratedColumns
事件处理程序:
private void OnLoaded(object sender, EventArgs e)
{
LoadServices();
}
XAML:
<TabItem Header="second...">
<DataGrid ... AutoGeneratedColumns="OnLoaded" />