gpt4 book ai didi

c# - 如果未选中 DataGridColumn/Row 中的任何复选框,则显示 MessageBox

转载 作者:行者123 更新时间:2023-11-30 18:15:02 25 4
gpt4 key购买 nike

我在 C# WPF 中有一个程序,在该程序中我有三个不同的。我们将这些列称为 A、B 和 C。现在我希望我的程序显示一个带有警告的 MessageBox 如果 ANY 中的 Checkbox如果选中了 A 和 C 列,则 B 列未选中。

如果我在这 3 列的当前行上勾选,我设法得到警告 MessageBox。例如,选中 A,未选中 B,选中 C,因此当我单击提交时,应该会弹出一个 MessageBox

假设我从 A 行开始,选中 A 列,未选中 B,选中 C。然后我继续 B 行并将所有列设置为选中并点击提交,它应该弹出一个 MessageBox 声称 A 行在 B 列中有一个未选中的框。到目前为止,我还不知道如何进行这项工作。

这是复选框的快照,上面有清晰的图片:

[![快照][1]][1]

如您所见,ADCL 已选中所有行,当我点击提交时,它不会显示消息框,因为 ADCP 在第二列中有一个未选中的框。

这是我的部分代码,仅适用于当前行:

  if (e.ColumnIndex == this.dataGridLocationDetails.Columns["ColIssuePermission"].Index) {
if (Convert.ToBoolean(dataGridLocationDetails.CurrentRow.Cells["ColIssuePermission"].Value) == false)
{
DialogResult dialogResult = MessageBox.Show("Issue Permission is unchecked. Do you wish to continue? ", "WARNING", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{

}
else if (dialogResult == DialogResult.No)
{
return;
}
}
}

更新:

   for (int i = 0; i < this.dataGridLocationDetails.Rows.Count; i++)
{
if (((Convert.ToBoolean(dataGridLocationDetails.Rows[i].Cells["colViewPermission"].Value) == true)
&& (Convert.ToBoolean(dataGridLocationDetails.Rows[i].Cells["colIssuePermission"].Value) == false)
))
{
if (Convert.ToBoolean(dataGridLocationDetails.CurrentRow.Cells["ColIssuePermission"].Value) == false)
{
DialogResult dialogResult = MessageBox.Show("The following Location ID has view permission but not issue permission:(LIST OUT LOCATION HERE) Do you wish to continue? ", "WARNING", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{

}
else if (dialogResult == DialogResult.No)
{
return;
}

}


}

最佳答案

请查找详细答案:创建了一个示例应用程序。请在此处找到 MainWindow.xaml.cs 的代码。构造函数:

public MainWindow()
{
InitializeComponent();
this.DataContext = this;
entities = new List<SampleEntity>()
{
new SampleEntity() { Id = 1, Description = "Test 1", IsViewPermission = true, IsIssuePermission = true, IsActive = true },
new SampleEntity() { Id = 2, Description = "Test 2", IsViewPermission = true, IsIssuePermission = true, IsActive = true },
new SampleEntity() { Id = 3, Description = "Test 3", IsViewPermission = true, IsIssuePermission = true, IsActive = true },
new SampleEntity() { Id = 4, Description = "Test 4", IsViewPermission = true, IsIssuePermission = true, IsActive = true },
new SampleEntity() { Id = 5, Description = "Test 5", IsViewPermission = true, IsIssuePermission = true, IsActive = true },
new SampleEntity() { Id = 6, Description = "Test 6", IsViewPermission = true, IsIssuePermission = true, IsActive = true },
new SampleEntity() { Id = 7, Description = "Test 7", IsViewPermission = true, IsIssuePermission = true, IsActive = true },
new SampleEntity() { Id = 8, Description = "Test 8", IsViewPermission = true, IsIssuePermission = true, IsActive = true }
};
dgMainGrid.ItemsSource = entities;
tempEntities = new List<SampleEntity>();
entities.ForEach(item =>
{
SampleEntity newEntity = new SampleEntity()
{
Id = item.Id,
Description = item.Description,
IsViewPermission = item.IsViewPermission,
IsIssuePermission = item.IsIssuePermission,
IsActive = item.IsActive
};
tempEntities.Add(newEntity);
});
}

如您所见,我已将数据网格的项目源设置为实体。因此,我正在创建一个新的 tempEntities 列表,它将保存实体的副本但不会更改。您可以使用 ICloneable 接口(interface)并在 Clone 方法中实现相同的接口(interface)。单击提交按钮:

private void Button_Click(object sender, RoutedEventArgs e)
{
string editedIds = string.Empty;
foreach(SampleEntity temp in tempEntities)
{
if(temp.IsViewPermission && temp.IsIssuePermission && temp.IsActive)
{
SampleEntity entity = entities.Single(item => item.Id == temp.Id);
if (entity.IsIssuePermission == false)
{
editedIds += entity.Id + ", ";
}
}
}
string message = string.Format("Issue Permission(s): {0} have been unchecked. Do you wish to continue?", editedIds);
MessageBoxResult dialogResult = MessageBox.Show(message, "WARNING", MessageBoxButton.YesNo);
if (dialogResult == MessageBoxResult.Yes)
{
}
else if (dialogResult == MessageBoxResult.No)
{
return;
}
}

它只是检查绑定(bind)到数据网格的实体是否已更改,方法是将它们与保存原始值的临时实体进行比较。 Id 是我的主键,你用你的。每次保存更改时,也请更新您的 tempEntities。

添加 xaml:

<Window x:Class="WPF_StackOverflow.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:WPF_StackOverflow"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
</Window.Resources>
<Grid x:Name="MainGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<DataGrid x:Name="dgMainGrid">
<DataGrid.Columns>
<DataGridTextColumn Header="Location ID" Binding="{Binding Path=Id, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="Location Descriptioon" Binding="{Binding Path=Description, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridCheckBoxColumn Header="View Permission" Binding="{Binding Path=IsViewPermission, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridCheckBoxColumn Header="Issue Permission" Binding="{Binding Path=IsIssuePermission, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridCheckBoxColumn Header="Active" Binding="{Binding Path=IsActive, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
</DataGrid>
<Button Grid.Row="1" Content="Submit" Click="Button_Click"/>
</Grid>

关于c# - 如果未选中 DataGridColumn/Row 中的任何复选框,则显示 MessageBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com