WPF DataGridTemplateColumn组合框问题

时间:2018-07-15 03:24:15

标签: c# sql wpf visual-studio xaml

我在准确地确定如何执行此操作时遇到了一些问题。我基本上希望在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#的整体问题,我深表歉意。

1 个答案:

答案 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>