WPF-"索引超出范围"错误,用于放置在选项卡控件的第二个选项卡项中的数据网格(但如果放置在第一个选项卡项中,则工作正常)



所以我有一个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移动到第二个DataGridAutoGeneratedColumns事件处理程序:

private void OnLoaded(object sender, EventArgs e)
{
LoadServices();
}

XAML:

<TabItem Header="second...">
<DataGrid ... AutoGeneratedColumns="OnLoaded" />

最新更新