我有一个数据网格,填充5列,在运行时我添加条目。 在这里,必须始终禁用/锁定前2列,因此我想为这些列设置ReadOnly。因此,我启用了DataGridCell.Selected =" DataGridGotFocus"在下面的xaml。
<DataGrid Name="dataGrid1" DataGridCell.Selected="DataGridGotFocus" ItemsSource="{Binding Path=CollectionList}"
SelectionMode="Single" AlternatingRowBackground="LightGray" AlternationCount="2" DockPanel.Dock="Right" CanUserAddRows="False"/>
我的xaml.cs文件有以下
private void DataGridGotFocus(object sender, RoutedEventArgs e)
{
dataGrid1.Columns[0].IsReadOnly = true;
dataGrid1.Columns[1].IsReadOnly = true;
dataGrid1.Columns[2].IsReadOnly = false;
dataGrid1.Columns[3].IsReadOnly = false;
dataGrid1.Columns[4].IsReadOnly = false;
}
这里的问题是,当我第一次点击任意一行时,我能够编辑该行的单元格的值,但每隔一行都被锁定,我无法编辑。 此外,最初我继续点击不同行中的每个单元格,它打开进行编辑,但是当我键入任何内容时,只有该行一直启用。每隔一行,都会被禁用。拜托,请帮助我。
为什么行不可编辑?
感谢任何帮助!
编辑:我需要在所有行上启用编辑功能。我应该明确指定任何属性吗?或者我的xaml很好吗?
编辑:看起来像设置DataGridCell.Selected =&#34; DataGridGotFocus&#34;不是问题。当我在没有设置它们的情况下重试时,我仍然无法编辑我的行。
答案 0 :(得分:0)
如果自动生成列,您可以使用AutoGeneratingColumn事件,它可以让您在添加到控件之前更改每个生成的列。&#34; (见DataGrid.AutoGeneratingColumn Event) 所以你可以这样做:
private void dataGrid1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyName == "FirstColumnProp")
{
e.Column.IsReadOnly = true;
}
else if ...
}
希望这能解决你的问题。
答案 1 :(得分:0)
问题是你让DataGrid自动为你生成列。这是一个简单的设置,可以快速查看行,但不允许您自定义DataGrid。我会专门指定列,以便您可以设置您想要读取或不读取的列。请注意AutoGenerateColumns="False"
<DataGrid
Name="dataGrid1"
AutoGenerateColumns="False"
DataGridCell.Selected="DataGridGotFocus"
ItemsSource="{Binding Path=CollectionList}"
SelectionMode="Single"
AlternatingRowBackground="LightGray"
AlternationCount="2"
DockPanel.Dock="Right"
CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn
Header="Column 1"
IsReadOnly="True"
Binding="{Binding ...}"/>
<DataGridTextColumn
Header="Column 2"
IsReadOnly="True"
Binding="{Binding ...}"/>
<DataGridTextColumn
Header="Column 3"
Binding="{Binding ...}"/>
...
</DataGrid.Columns>
</DataGrid>
答案 2 :(得分:0)
我发现了问题。这个问题似乎是验证问题。我似乎总是给那个可编辑的行中的一个单元格赋予不正确的值,当单元格验证失败时,DataGrid不会退出编辑模式。所以,这就是问题所在。但是没有任何暗示,因此我很难理解发生了什么。 感谢你的帮助。