我在准确地确定如何执行此操作时遇到了一些问题。我基本上希望在DataGrid中有一个ComboBox(当前将DataGridTemplateColumn与ComboBoxItems结合使用),可以从静态选项中进行选择。我还需要的是从组合框中选择一个选项,然后完成编辑要发送到SQL数据库表( STATUS )的数据/输入的行。我已经为DataGridTextColumn工作,但没有这种ComboBox类型。
在此STATUS表中有四列,两个TextColumns和两个ComboBoxColumns。我有其他表可以与ItemsSource和Bindings完美地工作。不确定如何使用ComboBox列执行此操作。
当我加载此DataGrid时,将应用一个过滤器(通过SQL查询)以仅显示特定时间的特定行。我需要能够使SQL DB也显示先前条目的正确数据。
XAML:
adapter.notifyDataSetChanged();
recyclerView.scheduleLayoutAnimation();
我知道文本绑定可能不正确。似乎每次使用此配置加载DataGrid时,行都会复制相同的数据。
C#:
self.datePickerView = UIDatePicker(frame: CGRect(x: 0, y: 50, width: UIScreen.main.bounds.width, height: 180))
if let datePickerView = self.datePickerView {
let currentDate: Date = Date()
datePickerView.calendar = NSCalendar.current
datePickerView.timeZone = NSCalendar.current.timeZone
var beginComponents = DateComponents()
beginComponents.day = 0
datePickerView.minimumDate = Calendar.current.date(byAdding: beginComponents, to: currentDate)
var endComponents = DateComponents()
endComponents.day = 6
datePickerView.maximumDate = Calendar.current.date(byAdding: endComponents, to: currentDate)
dateSelectorView.addSubview(datePickerView)
}
Here's an image as an example of what I'm trying to achieve.
基本上,SQL DB /查询通过过滤器显示任何适当的行(并将允许通过SqlBuilder GetUpdate命令进行编辑)。然后将显示一个带有静态选项的新行,并且在行编辑结束时将该数据发送到SQL数据库(由于SQL查询/过滤器而在重新加载时将显示该数据)。使用ComboBox实际上可行吗?我已经使用常规TextBoxColumns完美地工作了。
任何帮助将不胜感激!对于我的新问题以及WPF / C#的整体问题,我深表歉意。
答案 0 :(得分:0)
当您调用更新方法时,编辑刚刚结束,因此尚未保存新值用于更新。
您应该在更新之前调用EndEdit()
方法。
private void ptrSTATUS_GRID_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Commit)
{
DataRowView rowView = e.Row.DataContext as DataRowView;
rowView?.Row.EndEdit();
}
using (SqlConnection con = new SqlConnection(GDC_ConnectionString))
{
con.Open();
SqlCommandBuilder builder = new SqlCommandBuilder(sda);
sda.Update(dtPTR_STATUS);
con.Close();
}
}
我还更新了XAML代码:
<DataGridTemplateColumn Header="Status" MinWidth="512.5">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding STATUS}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding STATUS, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Tag">
<ComboBoxItem Content="GREEN" Tag="GREEN"/>
<ComboBoxItem Content="YELLOW" Tag="YELLOW"/>
<ComboBoxItem Content="ORANGE" Tag="ORANGE"/>
<ComboBoxItem Content="RED" Tag="RED"/>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>