【发布时间】:2023-02-08 15:53:19
【问题描述】:
我有一个 3 行的数据网格。
数据网格由一次写入三列的类(datagrid.class)生成。
此过程执行 3 次,这样就形成了一个 9 单元数据网格。
请注意,它是由列组成的。
我有一个包含 3 个组合框项的组合框。
combobox_SelectionChanged 方法需要这样设置:
private void Combobox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ComboOpticalInput.SelectedIndex == 2)
// Show 3 all rows,1st row gets grayish
sentense 1;
else if (ComboOpticalInput.SelectedIndex == 1)
// Show 3 all row, 2nd row gets grayish
sentense 2;
else
// Show 3 all row, 3rd row gets grayish
sentense 3;
}
我的数据网格:
<DataGrid Grid.Row="1" Grid.RowSpan="3" Grid.Column="0" Grid.ColumnSpan="3" Name="DataGrid1" RowHeaderWidth="0" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="option" Width="5*" IsReadOnly="True" x:Name="DGOP1" Binding="{Binding option}" />
<DataGridTextColumn Header="Value1" Width="3*" x:Name="DGOP2" Binding="{Binding PValue}" />
<DataGridTextColumn Header="Value2" Width="2*" x:Name="DGOP3" Binding="{Binding QValue}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
数据网格.cs:
namespace myq
{public class datagrid
{
public string option { get; set; }
public double PValue { get; set; }
public string QValue { get; set; }
}
}
整个 XAML:
<Window x:Class="myq.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:myq"
mc:Ignorable="d"
Title="MainWindow" Height="550" Width="600">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Margin="10" Grid.Row="0" Grid.Column="2">
<ComboBox Name="Combobox1" SelectedIndex="-1" SelectionChanged="Combobox1_SelectionChanged">
<ComboBoxItem>Item #1</ComboBoxItem>
<ComboBoxItem>Item #2</ComboBoxItem>
<ComboBoxItem>Item #3</ComboBoxItem>
</ComboBox>
</StackPanel>
<DataGrid Grid.Row="1" Grid.RowSpan="3" Grid.Column="0" Grid.ColumnSpan="3" Name="DataGrid1" RowHeaderWidth="0" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="option" Width="5*" IsReadOnly="True" x:Name="DGOP1" Binding="{Binding option}" />
<DataGridTextColumn Header="Value1" Width="3*" x:Name="DGOP2" Binding="{Binding PValue}" />
<DataGridTextColumn Header="Value2" Width="2*" x:Name="DGOP3" Binding="{Binding QValue}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
XAML.cs:
namespace myq
{
public partial class MainWindow : Window
{
public ObservableCollection<datagrid> FirstProperties { get; set; }
public MainWindow()
{
InitializeComponent();
FirstProperties = new()
{
new datagrid()
{
option = "Short",
PValue = 550,
QValue = "[nm]",
},
new datagrid()
{
option = "Long",
PValue = 3800,
QValue = "[nm]",
},
new datagrid()
{ option = "Medium",
PValue = 6,
QValue = "[]"
}
};
DataGrid1.ItemsSource = FirstProperties;
}
private void Combobox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Window win1 = new Window();
if (Combobox1.SelectedIndex == 2)
win1.Show();
else if (Combobox1.SelectedIndex == 1)
win1.Close();
else;
}
}
}
我的问题是:我如何写句子 1? 我搜索了很长时间没有找到解决方案。
我用谷歌搜索了这个,很多答案都是关于选定的数据网格行的。
我不需要选择任何行。comboboxItem 选择中的交互和数据网格的一行已设置。
我也尝试过类似的东西:
DataGrid1.row[1].Foreground = new SolidColorBrush(Colors.Grey);
回报是:
>"datagrid" does not contain a definition for "row"
感谢您关注这里。任何提示将不胜感激。
【问题讨论】:
-
一方面,不太清楚你到底在问什么?我思考您在问“如何根据组合框中的选择使数据网格中的特定行显示不同?”其次,您需要正确格式化您的代码,因为这会使其很难阅读 - 要么将所有这些行缩进 4 个前导空格,要么使用反引号 - “`”。 (你似乎已经添加了一些文本作为代码块,但那不是代码所以不确定如何/为什么)
-
是的,你没看错。我会编辑我的代码,谢谢
-
抱歉第一次使用 stackoverflow,我已经编辑过了。有没有办法让我获得数据网格的第一/第二/第三行?如果是,是否有办法将整行(或其中的元素)变成灰色?谢谢。