【发布时间】:2017-02-02 17:08:22
【问题描述】:
我在加载数据网格时遇到问题。实际上,我通过填充一个数据表来显示一个数据网格,该数据表填充了从 SQL DB 获取的值,其中包含 3 个带有复选框的额外列。当用户单击一个复选框时,必须启用下一个复选框并在 DB 中进行更新。为了实现这一点,我确实喜欢这样做。当用户单击一个复选框时,它将更新第一个任务已完成的数据表,因此下次读取数据库时,它会通过先禁用来启用下一个。我做了所有事情,但对清除早期的 datgrid 并显示更新的数据感到震惊。数据库正在更新,甚至在 itemsource 中,我也在更新更新的数据库。但它仍然显示上一个。
我的 DATAGRID 的 XAML 代码:
<DataGrid Name="DG_FollowUp" ItemsSource="{Binding dt}" AutoGenerateColumns="False" SelectionMode="Single" SelectedIndex="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" Grid.Row="01" BorderBrush="Black" BorderThickness="0.5" LoadingRow="DG_FollowUp_LoadingRow" IsEnabled="True" IsReadOnly="True" AlternationCount="2" ><!--VirtualizingStackPanel.IsVirtualizing="True"-->
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding EntryID}" Header="Entry ID" Width="75">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value='Center'/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding [TicketID/Subject]}" Header="TicketID/Subject" Width="300" CanUserSort="False"/>
<DataGridTextColumn Binding="{Binding [AddDate]}" Header="Start Date" Width="90" CanUserSort="False"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding [Status]}" Header="Status" Width="80" CanUserSort="False"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding [OwnerShip]}" Header="Ownership" Width="130" CanUserSort="False"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding [Comments]}" Header="Comments" Width="300" CanUserSort="False"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding [SLA DATE]}" Header="SLA Date" Width="90" CanUserSort="False"></DataGridTextColumn>
<DataGridTemplateColumn Header="Strike1" Width="65">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Click="CHK_Strike1_Click" IsChecked="{Binding Checked}" Name="CHK_Strike1" HorizontalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Strike2" Width="65">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Click="CHK_Strike2_Click" IsChecked="{Binding Checked}" Name="CHK_Strike2" HorizontalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Strike3" Width="65">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Click="CHK_Strike3_Click" Name="CHK_Strike3" IsChecked="{Binding Checked}" HorizontalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Close Tckt" Width="95">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Click="Chk_CloseTckt_Click" Name="Chk_CloseTckt" IsChecked="{Binding Checked}" HorizontalAlignment="Center" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
向 DataGrid 显示更新的数据库的代码:
using (SqlConnection con = new SqlConnection(UserIDDataTableConnString))
{
SqlCommand cmd = new SqlCommand("select * from TBL_TicketMngr where Status = 'Follow Up';", con);
con.Open();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable("TBL_TicketMngr");
sda.Fill(dt);
////DG_FollowUp.Items.Clear();
////DG_FollowUp.ItemsSource = null;
//DG_FollowUp.ItemsSource = dt.DefaultView;
////DG_FollowUp.Items.Refresh();
DG_FollowUp.DataContext = dt.DefaultView;
DG_FollowUp.ItemsSource = null;
//DG_FollowUp.ItemsSource = dt.DefaultView;
foreach (DataRow row in dt.Rows)
{
ThreeStrikeStatus.Add(row["StrikeStage"].ToString());
}
for (int i = 0; i < ThreeStrikeStatus.Count; i++)
{
if (ThreeStrikeStatus[i] == "ONE")
{
DG_FollowUp.GetCell(i, 7).IsEnabled = false;
DG_FollowUp.GetCell(i, 7).Visibility = Visibility.Hidden;
DG_FollowUp.GetCell(i, 9).IsEnabled = false;
DG_FollowUp.GetCell(i, 9).Visibility = Visibility.Hidden;
DG_FollowUp.GetCell(i, 10).IsEnabled = false;
}
else if (ThreeStrikeStatus[i] == "TWO")
{
DG_FollowUp.GetCell(i, 7).IsEnabled = false;
DG_FollowUp.GetCell(i, 7).Visibility = Visibility.Hidden;
DG_FollowUp.GetCell(i, 8).IsEnabled = false;
DG_FollowUp.GetCell(i, 8).Visibility = Visibility.Hidden;
DG_FollowUp.GetCell(i, 10).IsEnabled = false;
}
else if (ThreeStrikeStatus[i] == "THREE")
{
DG_FollowUp.GetCell(i, 7).IsEnabled = false;
DG_FollowUp.GetCell(i, 7).Visibility = Visibility.Hidden;
DG_FollowUp.GetCell(i, 8).IsEnabled = false;
DG_FollowUp.GetCell(i, 8).Visibility = Visibility.Hidden;
DG_FollowUp.GetCell(i, 9).IsEnabled = false;
DG_FollowUp.GetCell(i, 9).Visibility = Visibility.Hidden;
DG_FollowUp.GetCell(i, 10).IsEnabled = true;
}
else if (ThreeStrikeStatus[i] == "")
{
DG_FollowUp.GetCell(i, 8).IsEnabled = false;
DG_FollowUp.GetCell(i, 8).Visibility = Visibility.Hidden;
DG_FollowUp.GetCell(i, 9).IsEnabled = false;
DG_FollowUp.GetCell(i, 9).Visibility = Visibility.Hidden;
DG_FollowUp.GetCell(i, 10).IsEnabled = false;
}
}
DG_FollowUp.UpdateLayout();
如果上述有任何错误,或者是否有任何其他方法可以实现所需的功能,请告诉我。
我还面临一个问题,即根据从 db 获得的值检查 datagridtemplatecolumn 中的复选框。如果您对此有任何解决方案,请帮助我。
【问题讨论】: